Skip to content

Commit

Permalink
x86/kasan: Add helpers to align shadow addresses up and down
Browse files Browse the repository at this point in the history
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]
  • Loading branch information
sean-jc authored and zhangqiang4 committed Apr 3, 2024
1 parent 4eb26cd commit 1303c2c
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions arch/x86/mm/kasan_init_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,22 +316,33 @@ void __init kasan_early_init(void)
kasan_map_early_shadow(init_top_pgt);
}

static unsigned long kasan_mem_to_shadow_align_down(unsigned long va)
{
unsigned long shadow = (unsigned long)kasan_mem_to_shadow((void *)va);

return round_down(shadow, PAGE_SIZE);
}

static unsigned long kasan_mem_to_shadow_align_up(unsigned long va)
{
unsigned long shadow = (unsigned long)kasan_mem_to_shadow((void *)va);

return round_up(shadow, PAGE_SIZE);
}

void __init kasan_populate_shadow_for_vaddr(void *va, size_t size, int nid)
{
unsigned long shadow_start, shadow_end;

shadow_start = (unsigned long)kasan_mem_to_shadow(va);
shadow_start = round_down(shadow_start, PAGE_SIZE);
shadow_end = (unsigned long)kasan_mem_to_shadow(va + size);
shadow_end = round_up(shadow_end, PAGE_SIZE);

shadow_start = kasan_mem_to_shadow_align_down((unsigned long)va);
shadow_end = kasan_mem_to_shadow_align_up((unsigned long)va + size);
kasan_populate_shadow(shadow_start, shadow_end, nid);
}

void __init kasan_init(void)
{
unsigned long shadow_cea_begin, shadow_cea_end;
int i;
void *shadow_cea_begin, *shadow_cea_end;

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

Expand Down Expand Up @@ -372,16 +383,9 @@ void __init kasan_init(void)
map_range(&pfn_mapped[i]);
}

shadow_cea_begin = (void *)CPU_ENTRY_AREA_BASE;
shadow_cea_begin = kasan_mem_to_shadow(shadow_cea_begin);
shadow_cea_begin = (void *)round_down(
(unsigned long)shadow_cea_begin, PAGE_SIZE);

shadow_cea_end = (void *)(CPU_ENTRY_AREA_BASE +
CPU_ENTRY_AREA_MAP_SIZE);
shadow_cea_end = kasan_mem_to_shadow(shadow_cea_end);
shadow_cea_end = (void *)round_up(
(unsigned long)shadow_cea_end, PAGE_SIZE);
shadow_cea_begin = kasan_mem_to_shadow_align_down(CPU_ENTRY_AREA_BASE);
shadow_cea_end = kasan_mem_to_shadow_align_up(CPU_ENTRY_AREA_BASE +
CPU_ENTRY_AREA_MAP_SIZE);

kasan_populate_early_shadow(
kasan_mem_to_shadow((void *)PAGE_OFFSET + MAXMEM),
Expand All @@ -403,9 +407,9 @@ void __init kasan_init(void)

kasan_populate_early_shadow(
kasan_mem_to_shadow((void *)VMALLOC_END + 1),
shadow_cea_begin);
(void *)shadow_cea_begin);

kasan_populate_early_shadow(shadow_cea_end,
kasan_populate_early_shadow((void *)shadow_cea_end,
kasan_mem_to_shadow((void *)__START_KERNEL_map));

kasan_populate_shadow((unsigned long)kasan_mem_to_shadow(_stext),
Expand Down

0 comments on commit 1303c2c

Please sign in to comment.