linux/include/linux/kasan.h
<<
>>
Prefs
   1#ifndef _LINUX_KASAN_H
   2#define _LINUX_KASAN_H
   3
   4#include <linux/types.h>
   5
   6struct kmem_cache;
   7struct page;
   8struct vm_struct;
   9
  10#ifdef CONFIG_KASAN
  11
  12#define KASAN_SHADOW_SCALE_SHIFT 3
  13#define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL)
  14
  15#include <asm/kasan.h>
  16#include <linux/sched.h>
  17
  18static inline void *kasan_mem_to_shadow(const void *addr)
  19{
  20        return (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT)
  21                + KASAN_SHADOW_OFFSET;
  22}
  23
  24/* Enable reporting bugs after kasan_disable_current() */
  25static inline void kasan_enable_current(void)
  26{
  27        current->kasan_depth++;
  28}
  29
  30/* Disable reporting bugs for current task */
  31static inline void kasan_disable_current(void)
  32{
  33        current->kasan_depth--;
  34}
  35
  36void kasan_unpoison_shadow(const void *address, size_t size);
  37
  38void kasan_alloc_pages(struct page *page, unsigned int order);
  39void kasan_free_pages(struct page *page, unsigned int order);
  40
  41void kasan_poison_slab(struct page *page);
  42void kasan_unpoison_object_data(struct kmem_cache *cache, void *object);
  43void kasan_poison_object_data(struct kmem_cache *cache, void *object);
  44
  45void kasan_kmalloc_large(const void *ptr, size_t size);
  46void kasan_kfree_large(const void *ptr);
  47void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size);
  48void kasan_krealloc(const void *object, size_t new_size);
  49
  50void kasan_slab_alloc(struct kmem_cache *s, void *object);
  51void kasan_slab_free(struct kmem_cache *s, void *object);
  52
  53int kasan_module_alloc(void *addr, size_t size);
  54void kasan_free_shadow(const struct vm_struct *vm);
  55
  56#else /* CONFIG_KASAN */
  57
  58static inline void kasan_unpoison_shadow(const void *address, size_t size) {}
  59
  60static inline void kasan_enable_current(void) {}
  61static inline void kasan_disable_current(void) {}
  62
  63static inline void kasan_alloc_pages(struct page *page, unsigned int order) {}
  64static inline void kasan_free_pages(struct page *page, unsigned int order) {}
  65
  66static inline void kasan_poison_slab(struct page *page) {}
  67static inline void kasan_unpoison_object_data(struct kmem_cache *cache,
  68                                        void *object) {}
  69static inline void kasan_poison_object_data(struct kmem_cache *cache,
  70                                        void *object) {}
  71
  72static inline void kasan_kmalloc_large(void *ptr, size_t size) {}
  73static inline void kasan_kfree_large(const void *ptr) {}
  74static inline void kasan_kmalloc(struct kmem_cache *s, const void *object,
  75                                size_t size) {}
  76static inline void kasan_krealloc(const void *object, size_t new_size) {}
  77
  78static inline void kasan_slab_alloc(struct kmem_cache *s, void *object) {}
  79static inline void kasan_slab_free(struct kmem_cache *s, void *object) {}
  80
  81static inline int kasan_module_alloc(void *addr, size_t size) { return 0; }
  82static inline void kasan_free_shadow(const struct vm_struct *vm) {}
  83
  84#endif /* CONFIG_KASAN */
  85
  86#endif /* LINUX_KASAN_H */
  87