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