lkml.org 
[lkml]   [2016]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] x86/mm: only allow memmap=XX!YY over existing RAM
    Date
    Before this patch, passing a range that is beyond the physical memory
    range will succeed, the user will see a /dev/pmem0 and will be able to
    access it. Reads will always return 0 and writes will be silently
    ignored.

    I've gotten more than one bug report about mkfs.{xfs,ext4} or nvml
    failing that were eventually tracked down to be wrong values passed to
    memmap.

    This patch prevents the above issue by instead of adding a new memory
    range, only update a RAM memory range with the PRAM type. This way,
    passing the wrong memmap will either not give you a pmem at all or give
    you a smaller one that actually has RAM behind it.

    And if someone still needs to fake a pmem that doesn't have RAM behind
    it, they can simply do memmap=XX@YY,XX!YY.

    Signed-off-by: Yigal Korman <yigal@plexistor.com>
    ---
    arch/x86/kernel/e820.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
    index 621b501..4bd4207 100644
    --- a/arch/x86/kernel/e820.c
    +++ b/arch/x86/kernel/e820.c
    @@ -878,7 +878,7 @@ static int __init parse_memmap_one(char *p)
    e820_add_region(start_at, mem_size, E820_RESERVED);
    } else if (*p == '!') {
    start_at = memparse(p+1, &p);
    - e820_add_region(start_at, mem_size, E820_PRAM);
    + e820_update_range(start_at, mem_size, E820_RAM, E820_PRAM);
    } else
    e820_remove_range(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1);

    --
    1.9.3
    \
     
     \ /
      Last update: 2016-06-20 10:01    [W:4.195 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site