Skip to content

Commit bde258d

Browse files
sean-jchansendc
authored andcommitted
x86/kasan: Add helpers to align shadow addresses up and down
Add helpers to dedup code for aligning shadow address up/down to page boundaries when translating an address to its shadow. No functional change intended. Signed-off-by: Sean Christopherson <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Reviewed-by: Andrey Ryabinin <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 7077d2c commit bde258d

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

arch/x86/mm/kasan_init_64.c

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -316,22 +316,33 @@ void __init kasan_early_init(void)
316316
kasan_map_early_shadow(init_top_pgt);
317317
}
318318

319+
static unsigned long kasan_mem_to_shadow_align_down(unsigned long va)
320+
{
321+
unsigned long shadow = (unsigned long)kasan_mem_to_shadow((void *)va);
322+
323+
return round_down(shadow, PAGE_SIZE);
324+
}
325+
326+
static unsigned long kasan_mem_to_shadow_align_up(unsigned long va)
327+
{
328+
unsigned long shadow = (unsigned long)kasan_mem_to_shadow((void *)va);
329+
330+
return round_up(shadow, PAGE_SIZE);
331+
}
332+
319333
void __init kasan_populate_shadow_for_vaddr(void *va, size_t size, int nid)
320334
{
321335
unsigned long shadow_start, shadow_end;
322336

323-
shadow_start = (unsigned long)kasan_mem_to_shadow(va);
324-
shadow_start = round_down(shadow_start, PAGE_SIZE);
325-
shadow_end = (unsigned long)kasan_mem_to_shadow(va + size);
326-
shadow_end = round_up(shadow_end, PAGE_SIZE);
327-
337+
shadow_start = kasan_mem_to_shadow_align_down((unsigned long)va);
338+
shadow_end = kasan_mem_to_shadow_align_up((unsigned long)va + size);
328339
kasan_populate_shadow(shadow_start, shadow_end, nid);
329340
}
330341

331342
void __init kasan_init(void)
332343
{
344+
unsigned long shadow_cea_begin, shadow_cea_end;
333345
int i;
334-
void *shadow_cea_begin, *shadow_cea_end;
335346

336347
memcpy(early_top_pgt, init_top_pgt, sizeof(early_top_pgt));
337348

@@ -372,16 +383,9 @@ void __init kasan_init(void)
372383
map_range(&pfn_mapped[i]);
373384
}
374385

375-
shadow_cea_begin = (void *)CPU_ENTRY_AREA_BASE;
376-
shadow_cea_begin = kasan_mem_to_shadow(shadow_cea_begin);
377-
shadow_cea_begin = (void *)round_down(
378-
(unsigned long)shadow_cea_begin, PAGE_SIZE);
379-
380-
shadow_cea_end = (void *)(CPU_ENTRY_AREA_BASE +
381-
CPU_ENTRY_AREA_MAP_SIZE);
382-
shadow_cea_end = kasan_mem_to_shadow(shadow_cea_end);
383-
shadow_cea_end = (void *)round_up(
384-
(unsigned long)shadow_cea_end, PAGE_SIZE);
386+
shadow_cea_begin = kasan_mem_to_shadow_align_down(CPU_ENTRY_AREA_BASE);
387+
shadow_cea_end = kasan_mem_to_shadow_align_up(CPU_ENTRY_AREA_BASE +
388+
CPU_ENTRY_AREA_MAP_SIZE);
385389

386390
kasan_populate_early_shadow(
387391
kasan_mem_to_shadow((void *)PAGE_OFFSET + MAXMEM),
@@ -403,9 +407,9 @@ void __init kasan_init(void)
403407

404408
kasan_populate_early_shadow(
405409
kasan_mem_to_shadow((void *)VMALLOC_END + 1),
406-
shadow_cea_begin);
410+
(void *)shadow_cea_begin);
407411

408-
kasan_populate_early_shadow(shadow_cea_end,
412+
kasan_populate_early_shadow((void *)shadow_cea_end,
409413
kasan_mem_to_shadow((void *)__START_KERNEL_map));
410414

411415
kasan_populate_shadow((unsigned long)kasan_mem_to_shadow(_stext),

0 commit comments

Comments
 (0)