Skip to content

Commit f5a4071

Browse files
aryabininKAGA-KOKO
authored andcommitted
x86/mm: Set MODULES_END to 0xffffffffff000000
Since f06bdd4 ("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 2150652 ("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 92a0f81, which changed kasan_populate_zero_shadow() call the way it was before commit 2150652. 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 f06bdd4 was to move MODULES_END down if NR_CPUS is big, so the cpu_entry_area takes a lot of space. But since 92a0f81 ("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: f06bdd4 ("x86/mm: Adapt MODULES_END based on fixmap section size") Reported-by: Jakub Kicinski <[email protected]> Signed-off-by: Andrey Ryabinin <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Cc: [email protected] Cc: Andy Lutomirski <[email protected]> Cc: Thomas Garnier <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 2fd9c41 commit f5a4071

File tree

2 files changed

+2
-5
lines changed

2 files changed

+2
-5
lines changed

Documentation/x86/x86_64/mm.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks
4343
ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space
4444
... unused hole ...
4545
ffffffff80000000 - ffffffff9fffffff (=512 MB) kernel text mapping, from phys 0
46-
ffffffffa0000000 - [fixmap start] (~1526 MB) module mapping space
46+
ffffffffa0000000 - fffffffffeffffff (1520 MB) module mapping space
4747
[fixmap start] - ffffffffff5fffff kernel-internal fixmap range
4848
ffffffffff600000 - ffffffffff600fff (=4 kB) legacy vsyscall ABI
4949
ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole
@@ -67,9 +67,6 @@ memory window (this size is arbitrary, it can be raised later if needed).
6767
The mappings are not part of any other kernel PGD and are only available
6868
during EFI runtime calls.
6969

70-
The module mapping space size changes based on the CONFIG requirements for the
71-
following fixmap section.
72-
7370
Note that if CONFIG_RANDOMIZE_MEMORY is enabled, the direct mapping of all
7471
physical memory, vmalloc/ioremap space and virtual memory map are randomized.
7572
Their order is preserved but their base will be offset early at boot time.

arch/x86/include/asm/pgtable_64_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ typedef struct { pteval_t pte; } pte_t;
104104

105105
#define MODULES_VADDR (__START_KERNEL_map + KERNEL_IMAGE_SIZE)
106106
/* The module sections ends with the start of the fixmap */
107-
#define MODULES_END __fix_to_virt(__end_of_fixed_addresses + 1)
107+
#define MODULES_END _AC(0xffffffffff000000, UL)
108108
#define MODULES_LEN (MODULES_END - MODULES_VADDR)
109109

110110
#define ESPFIX_PGD_ENTRY _AC(-2, UL)

0 commit comments

Comments
 (0)