35 lines
819 B
C
35 lines
819 B
C
|
#ifndef __MM_KASAN_KASAN_H
|
||
|
#define __MM_KASAN_KASAN_H
|
||
|
|
||
|
#include <linux/kasan.h>
|
||
|
|
||
|
#define KASAN_SHADOW_SCALE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT)
|
||
|
#define KASAN_SHADOW_MASK (KASAN_SHADOW_SCALE_SIZE - 1)
|
||
|
|
||
|
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
|