linux/Documentation/x86
Andrey Ryabinin f5a40711fa x86/mm: Set MODULES_END to 0xffffffffff000000
Since f06bdd4001 ("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
  21506525fb ("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 92a0f81d89, which
changed kasan_populate_zero_shadow() call the way it was before
commit 21506525fb.

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 f06bdd4001 was to move MODULES_END down if
NR_CPUS is big, so the cpu_entry_area takes a lot of space.
But since 92a0f81d89 ("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: f06bdd4001 ("x86/mm: Adapt MODULES_END based on fixmap section size")
Reported-by: Jakub Kicinski <kubakici@wp.pl>
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Thomas 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
2018-01-04 23:04:57 +01:00
..
i386
x86_64 x86/mm: Set MODULES_END to 0xffffffffff000000 2018-01-04 23:04:57 +01:00
00-INDEX
amd-memory-encryption.txt x86/cpu/AMD: Document AMD Secure Memory Encryption (SME) 2017-07-18 11:37:58 +02:00
boot.txt docs: fix locations of several documents that got moved 2016-10-24 08:12:35 -02:00
earlyprintk.txt
entry_64.txt
exception-tables.txt
intel_mpx.txt x86/Documentation: Fix various typos in Documentation/x86/ files 2016-07-01 10:00:10 +02:00
intel_rdt_ui.txt x86/intel_rdt: Show bitmask of shareable resource with other executing units 2017-08-01 22:41:30 +02:00
kernel-stacks
microcode.txt x86/microcode: Document the three loading methods 2017-07-25 11:26:24 +02:00
mtrr.txt
orc-unwinder.txt x86/unwind: Rename unwinder config options to 'CONFIG_UNWINDER_*' 2017-10-14 10:12:12 +02:00
pat.txt
protection-keys.txt x86/mm/pkeys: Fix typo in Documentation/x86/protection-keys.txt 2017-07-25 11:28:13 +02:00
tlb.txt x86/Documentation: Fix various typos in Documentation/x86/ files 2016-07-01 10:00:10 +02:00
topology.txt x86/topology: Document cpu_llc_id 2016-12-20 09:36:29 +01:00
usb-legacy-support.txt
zero-page.txt Merge branch 'linus' into WIP.x86/boot, to fix up conflicts and to pick up updates 2017-03-01 09:02:26 +01:00