Messages in this thread Patch in this message | | | From | Baoquan He <> | Subject | [PATCH v3 2/2] x86/mm/KASLR: Change the granularity of randomization to PUD size in 5-level | Date | Fri, 8 Mar 2019 10:56:16 +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 8bd4192c68b9..9a8756517504 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -125,10 +125,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; @@ -137,10 +134,7 @@ void __init kernel_randomize_memory(void) * randomization alignment. */ vaddr += get_padding(&kaslr_regions[i]); - 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; } } @@ -197,8 +191,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
| |