xref: /openbmc/linux/arch/x86/include/asm/kasan.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
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 Popov static inline void kasan_early_init(void) { }
kasan_init(void)34ef7f0d6aSAndrey Ryabinin static inline void kasan_init(void) { }
kasan_populate_shadow_for_vaddr(void * va,size_t size,int nid)35*3f148f33SAndrey Ryabinin static 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