1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2ef7f0d6aSAndrey Ryabinin #ifndef _ASM_X86_KASAN_H 3ef7f0d6aSAndrey Ryabinin #define _ASM_X86_KASAN_H 4ef7f0d6aSAndrey Ryabinin 5920e277eSAndrey Ryabinin #include <linux/const.h> 6920e277eSAndrey Ryabinin #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) 7917538e2SAndrey Konovalov #define KASAN_SHADOW_SCALE_SHIFT 3 8920e277eSAndrey Ryabinin 9ef7f0d6aSAndrey Ryabinin /* 10ef7f0d6aSAndrey Ryabinin * Compiler uses shadow offset assuming that addresses start 11ef7f0d6aSAndrey Ryabinin * from 0. Kernel addresses don't start from 0, so shadow 12ef7f0d6aSAndrey Ryabinin * for kernel really starts from compiler's shadow offset + 13ef7f0d6aSAndrey Ryabinin * 'kernel address space start' >> KASAN_SHADOW_SCALE_SHIFT 14ef7f0d6aSAndrey Ryabinin */ 15ef7f0d6aSAndrey Ryabinin #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ 16917538e2SAndrey Konovalov ((-1UL << __VIRTUAL_MASK_SHIFT) >> \ 17917538e2SAndrey Konovalov KASAN_SHADOW_SCALE_SHIFT)) 184c7c4483SKirill A. Shutemov /* 19917538e2SAndrey Konovalov * 47 bits for kernel address -> (47 - KASAN_SHADOW_SCALE_SHIFT) bits for shadow 20917538e2SAndrey Konovalov * 56 bits for kernel address -> (56 - KASAN_SHADOW_SCALE_SHIFT) bits for shadow 214c7c4483SKirill A. Shutemov */ 22917538e2SAndrey Konovalov #define KASAN_SHADOW_END (KASAN_SHADOW_START + \ 23917538e2SAndrey Konovalov (1ULL << (__VIRTUAL_MASK_SHIFT - \ 24917538e2SAndrey Konovalov KASAN_SHADOW_SCALE_SHIFT))) 25ef7f0d6aSAndrey Ryabinin 26ef7f0d6aSAndrey Ryabinin #ifndef __ASSEMBLY__ 27ef7f0d6aSAndrey Ryabinin 28ef7f0d6aSAndrey Ryabinin #ifdef CONFIG_KASAN 295d5aa3cfSAlexander Popov void __init kasan_early_init(void); 30ef7f0d6aSAndrey Ryabinin void __init kasan_init(void); 31*3f148f33SAndrey Ryabinin void __init kasan_populate_shadow_for_vaddr(void *va, size_t size, int nid); 32ef7f0d6aSAndrey Ryabinin #else kasan_early_init(void)335d5aa3cfSAlexander Popovstatic inline void kasan_early_init(void) { } kasan_init(void)34ef7f0d6aSAndrey Ryabininstatic inline void kasan_init(void) { } kasan_populate_shadow_for_vaddr(void * va,size_t size,int nid)35*3f148f33SAndrey Ryabininstatic inline void kasan_populate_shadow_for_vaddr(void *va, size_t size, 36*3f148f33SAndrey Ryabinin int nid) { } 37ef7f0d6aSAndrey Ryabinin #endif 38ef7f0d6aSAndrey Ryabinin 39ef7f0d6aSAndrey Ryabinin #endif 40ef7f0d6aSAndrey Ryabinin 41ef7f0d6aSAndrey Ryabinin #endif 42