• Andrey Ryabinin's avatar
    x86/mm: Set MODULES_END to 0xffffffffff000000 · f5a40711
    Andrey Ryabinin authored
    Since f06bdd40 ("x86/mm: Adapt MODULES_END based on fixmap section size")
    kasan_mem_to_shadow(MODULES_END) could be not aligned to a page boundary.
    
    So passing page unaligned address to kasan_populate_zero_shadow() have two
    possible effects:
    
    1) It may leave one page hole in supposed to be populated area. After commit
      21506525 ("x86/kasan/64: Teach KASAN about the cpu_entry_area") that
      hole happens to be in the shadow covering fixmap area and leads to crash:
    
     BUG: unable to handle kernel paging request at fffffbffffe8ee04
     RIP: 0010:check_memory_region+0x5c/0x190
    
     Call Trace:
      <NMI>
      memcpy+0x1f/0x50
      ghes_copy_tofrom_phys+0xab/0x180
      ghes_read_estatus+0xfb/0x280
      ghes_notify_nmi+0x2b2/0x410
      nmi_handle+0x115/0x2c0
      default_do_nmi+0x57/0x110
      do_nmi+0xf8/0x150
      end_repeat_nmi+0x1a/0x1e
    
    Note, the crash likely disappeared after commit 92a0f81d, which
    changed kasan_populate_zero_shadow() call the way it was before
    commit 21506525.
    
    2) Attempt to load module near MODULES_END will fail, because
       __vmalloc_node_range() called from kasan_module_alloc() will hit the
       WARN_ON(!pte_none(*pte)) in the vmap_pte_range() and bail out with error.
    
    To fix this we need to make kasan_mem_to_shadow(MODULES_END) page aligned
    which means that MODULES_END should be 8*PAGE_SIZE aligned.
    
    The whole point of commit f06bdd40 was to move MODULES_END down if
    NR_CPUS is big, so the cpu_entry_area takes a lot of space.
    But since 92a0f81d ("x86/cpu_entry_area: Move it out of the fixmap")
    the cpu_entry_area is no longer in fixmap, so we could just set
    MODULES_END to a fixed 8*PAGE_SIZE aligned address.
    
    Fixes: f06bdd40 ("x86/mm: Adapt MODULES_END based on fixmap section size")
    Reported-by: default avatarJakub Kicinski <kubakici@wp.pl>
    Signed-off-by: default avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Thomas Garnier <thgarnie@google.com>
    Link: https://lkml.kernel.org/r/20171228160620.23818-1-aryabinin@virtuozzo.com
    f5a40711
mm.txt 3.62 KB