xref: /openbmc/linux/include/linux/kasan.h (revision 0b24becc)
1*0b24beccSAndrey Ryabinin #ifndef _LINUX_KASAN_H
2*0b24beccSAndrey Ryabinin #define _LINUX_KASAN_H
3*0b24beccSAndrey Ryabinin 
4*0b24beccSAndrey Ryabinin #include <linux/types.h>
5*0b24beccSAndrey Ryabinin 
6*0b24beccSAndrey Ryabinin struct kmem_cache;
7*0b24beccSAndrey Ryabinin struct page;
8*0b24beccSAndrey Ryabinin 
9*0b24beccSAndrey Ryabinin #ifdef CONFIG_KASAN
10*0b24beccSAndrey Ryabinin 
11*0b24beccSAndrey Ryabinin #define KASAN_SHADOW_SCALE_SHIFT 3
12*0b24beccSAndrey Ryabinin #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL)
13*0b24beccSAndrey Ryabinin 
14*0b24beccSAndrey Ryabinin #include <asm/kasan.h>
15*0b24beccSAndrey Ryabinin #include <linux/sched.h>
16*0b24beccSAndrey Ryabinin 
17*0b24beccSAndrey Ryabinin static inline void *kasan_mem_to_shadow(const void *addr)
18*0b24beccSAndrey Ryabinin {
19*0b24beccSAndrey Ryabinin 	return (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT)
20*0b24beccSAndrey Ryabinin 		+ KASAN_SHADOW_OFFSET;
21*0b24beccSAndrey Ryabinin }
22*0b24beccSAndrey Ryabinin 
23*0b24beccSAndrey Ryabinin /* Enable reporting bugs after kasan_disable_current() */
24*0b24beccSAndrey Ryabinin static inline void kasan_enable_current(void)
25*0b24beccSAndrey Ryabinin {
26*0b24beccSAndrey Ryabinin 	current->kasan_depth++;
27*0b24beccSAndrey Ryabinin }
28*0b24beccSAndrey Ryabinin 
29*0b24beccSAndrey Ryabinin /* Disable reporting bugs for current task */
30*0b24beccSAndrey Ryabinin static inline void kasan_disable_current(void)
31*0b24beccSAndrey Ryabinin {
32*0b24beccSAndrey Ryabinin 	current->kasan_depth--;
33*0b24beccSAndrey Ryabinin }
34*0b24beccSAndrey Ryabinin 
35*0b24beccSAndrey Ryabinin void kasan_unpoison_shadow(const void *address, size_t size);
36*0b24beccSAndrey Ryabinin 
37*0b24beccSAndrey Ryabinin #else /* CONFIG_KASAN */
38*0b24beccSAndrey Ryabinin 
39*0b24beccSAndrey Ryabinin static inline void kasan_unpoison_shadow(const void *address, size_t size) {}
40*0b24beccSAndrey Ryabinin 
41*0b24beccSAndrey Ryabinin static inline void kasan_enable_current(void) {}
42*0b24beccSAndrey Ryabinin static inline void kasan_disable_current(void) {}
43*0b24beccSAndrey Ryabinin 
44*0b24beccSAndrey Ryabinin #endif /* CONFIG_KASAN */
45*0b24beccSAndrey Ryabinin 
46*0b24beccSAndrey Ryabinin #endif /* LINUX_KASAN_H */
47