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 | 163 | default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB |
| 164 | 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 | 172 | config ARCH_FLATMEM_ENABLE |
| 167 | 173 | def_bool !NUMA |
| 168 | 174 | |
| @@ -30,8 +30,7 @@ · 29 unmodified lines | ||
| 30 | 30 | #define KASAN_SHADOW_SIZE (UL(1) << ((CONFIG_VA_BITS - 1) - KASAN_SHADOW_SCALE_SHIFT)) |
| 31 | 31 | #define KASAN_SHADOW_START KERN_VIRT_START |
| 32 | 32 | #define KASAN_SHADOW_END (KASAN_SHADOW_START + KASAN_SHADOW_SIZE) |
| 33 | −#define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << \ | |
| 34 | − (64 - KASAN_SHADOW_SCALE_SHIFT))) | |
| 33 | +#define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) | |
| 35 | 34 | |
| 36 | 35 | void kasan_init(void); |
| 37 | 36 | asmlinkage void kasan_early_init(void); |
| @@ -193,6 +193,7 @@ setup_trap_vector: · 192 unmodified lines | ||
| 193 | 193 | csrw CSR_SCRATCH, zero |
| 194 | 194 | ret |
| 195 | 195 | |
| 196 | +.align 2 | |
| 196 | 197 | .Lsecondary_park: |
| 197 | 198 | /* We lack SMP support or have too many harts, so park this hart */ |
| 198 | 199 | wfi |
| @@ -17,6 +17,9 @@ asmlinkage void __init kasan_early_init(void) · 16 unmodified lines | ||
| 17 | 17 | uintptr_t i; |
| 18 | 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 | 23 | for (i = 0; i < PTRS_PER_PTE; ++i) |
| 21 | 24 | set_pte(kasan_early_shadow_pte + i, |
| 22 | 25 | mk_pte(virt_to_page(kasan_early_shadow_page), |
| @@ -172,21 +175,10 @@ void __init kasan_init(void) · 149 unmodified lines | ||
| 172 | 175 | phys_addr_t p_start, p_end; |
| 173 | 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 | 178 | if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) |
| 183 | 179 | kasan_shallow_populate( |
| 184 | 180 | (void *)kasan_mem_to_shadow((void *)VMALLOC_START), |
| 185 | 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 | 183 | /* Populate the linear mapping */ |
| 192 | 184 | for_each_mem_range(i, &p_start, &p_end) { |