Skip to content

Commit fb754f9

Browse files
thgarnieIngo Molnar
authored andcommitted
x86/mm/KASLR: Increase BRK pages for KASLR memory randomization
Default implementation expects 6 pages maximum are needed for low page allocations. If KASLR memory randomization is enabled, the worse case of e820 layout would require 12 pages (no large pages). It is due to the PUD level randomization and the variable e820 memory layout. This bug was found while doing extensive testing of KASLR memory randomization on different type of hardware. Signed-off-by: Thomas Garnier <[email protected]> Cc: Aleksey Makarov <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Baoquan He <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: Brian Gerst <[email protected]> Cc: Christian Borntraeger <[email protected]> Cc: Dan Williams <[email protected]> Cc: Dave Hansen <[email protected]> Cc: Dave Young <[email protected]> Cc: Denys Vlasenko <[email protected]> Cc: Fabian Frederick <[email protected]> Cc: H. Peter Anvin <[email protected]> Cc: Joerg Roedel <[email protected]> Cc: Josh Poimboeuf <[email protected]> Cc: Kees Cook <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Lv Zheng <[email protected]> Cc: Mark Salter <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Rafael J . Wysocki <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Toshi Kani <[email protected]> Cc: [email protected] Fixes: 021182e ("Enable KASLR for physical mapping memory regions") Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
1 parent c7d2361 commit fb754f9

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

arch/x86/mm/init.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,18 @@ __ref void *alloc_low_pages(unsigned int num)
122122
return __va(pfn << PAGE_SHIFT);
123123
}
124124

125-
/* need 3 4k for initial PMD_SIZE, 3 4k for 0-ISA_END_ADDRESS */
126-
#define INIT_PGT_BUF_SIZE (6 * PAGE_SIZE)
125+
/*
126+
* By default need 3 4k for initial PMD_SIZE, 3 4k for 0-ISA_END_ADDRESS.
127+
* With KASLR memory randomization, depending on the machine e820 memory
128+
* and the PUD alignment. We may need twice more pages when KASLR memory
129+
* randomization is enabled.
130+
*/
131+
#ifndef CONFIG_RANDOMIZE_MEMORY
132+
#define INIT_PGD_PAGE_COUNT 6
133+
#else
134+
#define INIT_PGD_PAGE_COUNT 12
135+
#endif
136+
#define INIT_PGT_BUF_SIZE (INIT_PGD_PAGE_COUNT * PAGE_SIZE)
127137
RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE);
128138
void __init early_alloc_pgt_buf(void)
129139
{

0 commit comments

Comments
 (0)