#ifndef __MM_KASAN_KASAN_H #define __MM_KASAN_KASAN_H #include #define KASAN_SHADOW_SCALE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT) #define KASAN_SHADOW_MASK (KASAN_SHADOW_SCALE_SIZE - 1) #define KASAN_FREE_PAGE 0xFF /* page was freed */ struct kasan_access_info { const void *access_addr; const void *first_bad_addr; size_t access_size; bool is_write; unsigned long ip; }; void kasan_report_error(struct kasan_access_info *info); void kasan_report_user_access(struct kasan_access_info *info); static inline const void *kasan_shadow_to_mem(const void *shadow_addr) { return (void *)(((unsigned long)shadow_addr - KASAN_SHADOW_OFFSET) << KASAN_SHADOW_SCALE_SHIFT); } static inline bool kasan_enabled(void) { return !current->kasan_depth; } void kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip); #endif