Messages in this thread Patch in this message | | | From | Baoquan He <> | Subject | [PATCH v2 2/2] x86/mm/KASLR: Change the granularity of randomization to PUD size in 5-level | Date | Thu, 28 Feb 2019 08:35:22 +0800 |
| |
The current randomization granularity of 5-level is 512 GB. Improve it to 1 GB. This can add more randomness to memory region KASLR in 5-level paging mode
Signed-off-by: Baoquan He <bhe@redhat.com> --- arch/x86/mm/kaslr.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 131e08a10a68..99ec75634613 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -204,10 +204,7 @@ void __init kernel_randomize_memory(void) */ entropy = remain_entropy / (ARRAY_SIZE(kaslr_regions) - i); prandom_bytes_state(&rand_state, &rand, sizeof(rand)); - if (pgtable_l5_enabled()) - entropy = (rand % (entropy + 1)) & P4D_MASK; - else - entropy = (rand % (entropy + 1)) & PUD_MASK; + entropy = (rand % (entropy + 1)) & PUD_MASK; vaddr += entropy; *kaslr_regions[i].base = vaddr; @@ -216,10 +213,7 @@ void __init kernel_randomize_memory(void) * randomization alignment. */ vaddr += kaslr_regions[i].size_tb << TB_SHIFT; - if (pgtable_l5_enabled()) - vaddr = round_up(vaddr + 1, P4D_SIZE); - else - vaddr = round_up(vaddr + 1, PUD_SIZE); + vaddr = round_up(vaddr + 1, PUD_SIZE); remain_entropy -= entropy; } } @@ -276,8 +270,8 @@ static void __meminit init_trampoline_pud(void) * that area. In case KASLR disabled, the 1st PGD entry of the * direct mapping is copied directly. If KASLR is enabled, only * copy the 1st PUD entry where physical address 0 resides since - * the granularity of randomization is PUD size in 4-level, and - * P4D size in 5-level. + * the granularity of randomization is PUD size in both 4-level and + * 5-level. * * This consumes one low memory page in 4-level case, and extra one * in 5-level. -- 2.17.2
| |