Pull RISC-V fixes from Palmer Dabbelt: "These are pretty late, but they do fix concrete issues. - ensure the trap vector's address is aligned. - avoid re-populating the KASAN shadow memory. - allow kasan to build without warnings, which have recently become errors" * tag 'riscv-for-linus-5.15-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux: riscv: Fix asan-stack clang build riscv: Do not re-populate shadow memory with kasan_populate_early_shadow riscv: fix misalgned trap vector base address
Unified · Split
| @@ -163,6 +163,12 @@ config PAGE_OFFSET · 162 unmodified lines | |||
| 163 | default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB | 163 | default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB |
| 164 | default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB | 164 | default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB |
| 165 | 165 | ||
| 166 | config KASAN_SHADOW_OFFSET | ||
| 167 | hex | ||
| 168 | depends on KASAN_GENERIC | ||
| 169 | default 0xdfffffc800000000 if 64BIT | ||
| 170 | default 0xffffffff if 32BIT | ||
| 171 | |||
| 166 | config ARCH_FLATMEM_ENABLE | 172 | config ARCH_FLATMEM_ENABLE |
| 167 | def_bool !NUMA | 173 | def_bool !NUMA |
| 168 | 174 | ||
| @@ -30,8 +30,7 @@ · 29 unmodified lines | |||
| 30 | #define KASAN_SHADOW_SIZE (UL(1) << ((CONFIG_VA_BITS - 1) - KASAN_SHADOW_SCALE_SHIFT)) | 30 | #define KASAN_SHADOW_SIZE (UL(1) << ((CONFIG_VA_BITS - 1) - KASAN_SHADOW_SCALE_SHIFT)) |
| 31 | #define KASAN_SHADOW_START KERN_VIRT_START | 31 | #define KASAN_SHADOW_START KERN_VIRT_START |
| 32 | #define KASAN_SHADOW_END (KASAN_SHADOW_START + KASAN_SHADOW_SIZE) | 32 | #define KASAN_SHADOW_END (KASAN_SHADOW_START + KASAN_SHADOW_SIZE) |
| 33 | #define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << \ | 33 | #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) |
| 34 | (64 - KASAN_SHADOW_SCALE_SHIFT))) | ||
| 35 | 34 | ||
| 36 | void kasan_init(void); | 35 | void kasan_init(void); |
| 37 | asmlinkage void kasan_early_init(void); | 36 | asmlinkage void kasan_early_init(void); |
| @@ -193,6 +193,7 @@ setup_trap_vector: · 192 unmodified lines | |||
| 193 | csrw CSR_SCRATCH, zero | 193 | csrw CSR_SCRATCH, zero |
| 194 | ret | 194 | ret |
| 195 | 195 | ||
| 196 | .align 2 | ||
| 196 | .Lsecondary_park: | 197 | .Lsecondary_park: |
| 197 | /* We lack SMP support or have too many harts, so park this hart */ | 198 | /* We lack SMP support or have too many harts, so park this hart */ |
| 198 | wfi | 199 | wfi |
| @@ -17,6 +17,9 @@ asmlinkage void __init kasan_early_init(void) · 16 unmodified lines | |||
| 17 | uintptr_t i; | 17 | uintptr_t i; |
| 18 | pgd_t *pgd = early_pg_dir + pgd_index(KASAN_SHADOW_START); | 18 | pgd_t *pgd = early_pg_dir + pgd_index(KASAN_SHADOW_START); |
| 19 | 19 | ||
| 20 | BUILD_BUG_ON(KASAN_SHADOW_OFFSET != | ||
| 21 | KASAN_SHADOW_END - (1UL << (64 - KASAN_SHADOW_SCALE_SHIFT))); | ||
| 22 | |||
| 20 | for (i = 0; i < PTRS_PER_PTE; ++i) | 23 | for (i = 0; i < PTRS_PER_PTE; ++i) |
| 21 | set_pte(kasan_early_shadow_pte + i, | 24 | set_pte(kasan_early_shadow_pte + i, |
| 22 | mk_pte(virt_to_page(kasan_early_shadow_page), | 25 | mk_pte(virt_to_page(kasan_early_shadow_page), |
| @@ -172,21 +175,10 @@ void __init kasan_init(void) · 149 unmodified lines | |||
| 172 | phys_addr_t p_start, p_end; | 175 | phys_addr_t p_start, p_end; |
| 173 | u64 i; | 176 | u64 i; |
| 174 | 177 | ||
| 175 | /* | ||
| 176 | * Populate all kernel virtual address space with kasan_early_shadow_page | ||
| 177 | * except for the linear mapping and the modules/kernel/BPF mapping. | ||
| 178 | */ | ||
| 179 | kasan_populate_early_shadow((void *)KASAN_SHADOW_START, | ||
| 180 | (void *)kasan_mem_to_shadow((void *) | ||
| 181 | VMEMMAP_END)); | ||
| 182 | if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) | 178 | if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) |
| 183 | kasan_shallow_populate( | 179 | kasan_shallow_populate( |
| 184 | (void *)kasan_mem_to_shadow((void *)VMALLOC_START), | 180 | (void *)kasan_mem_to_shadow((void *)VMALLOC_START), |
| 185 | (void *)kasan_mem_to_shadow((void *)VMALLOC_END)); | 181 | (void *)kasan_mem_to_shadow((void *)VMALLOC_END)); |
| 186 | else | ||
| 187 | kasan_populate_early_shadow( | ||
| 188 | (void *)kasan_mem_to_shadow((void *)VMALLOC_START), | ||
| 189 | (void *)kasan_mem_to_shadow((void *)VMALLOC_END)); | ||
| 190 | 182 | ||
| 191 | /* Populate the linear mapping */ | 183 | /* Populate the linear mapping */ |
| 192 | for_each_mem_range(i, &p_start, &p_end) { | 184 | for_each_mem_range(i, &p_start, &p_end) { |