diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/kasan.h | 27 | ||||
-rw-r--r-- | include/linux/slab.h | 11 |
2 files changed, 36 insertions, 2 deletions
diff --git a/include/linux/kasan.h b/include/linux/kasan.h index f00c15c41235..d5310eef3e38 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h | |||
@@ -37,6 +37,18 @@ void kasan_unpoison_shadow(const void *address, size_t size); | |||
37 | void kasan_alloc_pages(struct page *page, unsigned int order); | 37 | void kasan_alloc_pages(struct page *page, unsigned int order); |
38 | void kasan_free_pages(struct page *page, unsigned int order); | 38 | void kasan_free_pages(struct page *page, unsigned int order); |
39 | 39 | ||
40 | void kasan_poison_slab(struct page *page); | ||
41 | void kasan_unpoison_object_data(struct kmem_cache *cache, void *object); | ||
42 | void kasan_poison_object_data(struct kmem_cache *cache, void *object); | ||
43 | |||
44 | void kasan_kmalloc_large(const void *ptr, size_t size); | ||
45 | void kasan_kfree_large(const void *ptr); | ||
46 | void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size); | ||
47 | void kasan_krealloc(const void *object, size_t new_size); | ||
48 | |||
49 | void kasan_slab_alloc(struct kmem_cache *s, void *object); | ||
50 | void kasan_slab_free(struct kmem_cache *s, void *object); | ||
51 | |||
40 | #else /* CONFIG_KASAN */ | 52 | #else /* CONFIG_KASAN */ |
41 | 53 | ||
42 | static inline void kasan_unpoison_shadow(const void *address, size_t size) {} | 54 | static inline void kasan_unpoison_shadow(const void *address, size_t size) {} |
@@ -47,6 +59,21 @@ static inline void kasan_disable_current(void) {} | |||
47 | static inline void kasan_alloc_pages(struct page *page, unsigned int order) {} | 59 | static inline void kasan_alloc_pages(struct page *page, unsigned int order) {} |
48 | static inline void kasan_free_pages(struct page *page, unsigned int order) {} | 60 | static inline void kasan_free_pages(struct page *page, unsigned int order) {} |
49 | 61 | ||
62 | static inline void kasan_poison_slab(struct page *page) {} | ||
63 | static inline void kasan_unpoison_object_data(struct kmem_cache *cache, | ||
64 | void *object) {} | ||
65 | static inline void kasan_poison_object_data(struct kmem_cache *cache, | ||
66 | void *object) {} | ||
67 | |||
68 | static inline void kasan_kmalloc_large(void *ptr, size_t size) {} | ||
69 | static inline void kasan_kfree_large(const void *ptr) {} | ||
70 | static inline void kasan_kmalloc(struct kmem_cache *s, const void *object, | ||
71 | size_t size) {} | ||
72 | static inline void kasan_krealloc(const void *object, size_t new_size) {} | ||
73 | |||
74 | static inline void kasan_slab_alloc(struct kmem_cache *s, void *object) {} | ||
75 | static inline void kasan_slab_free(struct kmem_cache *s, void *object) {} | ||
76 | |||
50 | #endif /* CONFIG_KASAN */ | 77 | #endif /* CONFIG_KASAN */ |
51 | 78 | ||
52 | #endif /* LINUX_KASAN_H */ | 79 | #endif /* LINUX_KASAN_H */ |
diff --git a/include/linux/slab.h b/include/linux/slab.h index ed2ffaab59ea..76f1feeabd38 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -104,6 +104,7 @@ | |||
104 | (unsigned long)ZERO_SIZE_PTR) | 104 | (unsigned long)ZERO_SIZE_PTR) |
105 | 105 | ||
106 | #include <linux/kmemleak.h> | 106 | #include <linux/kmemleak.h> |
107 | #include <linux/kasan.h> | ||
107 | 108 | ||
108 | struct mem_cgroup; | 109 | struct mem_cgroup; |
109 | /* | 110 | /* |
@@ -325,7 +326,10 @@ kmem_cache_alloc_node_trace(struct kmem_cache *s, | |||
325 | static __always_inline void *kmem_cache_alloc_trace(struct kmem_cache *s, | 326 | static __always_inline void *kmem_cache_alloc_trace(struct kmem_cache *s, |
326 | gfp_t flags, size_t size) | 327 | gfp_t flags, size_t size) |
327 | { | 328 | { |
328 | return kmem_cache_alloc(s, flags); | 329 | void *ret = kmem_cache_alloc(s, flags); |
330 | |||
331 | kasan_kmalloc(s, ret, size); | ||
332 | return ret; | ||
329 | } | 333 | } |
330 | 334 | ||
331 | static __always_inline void * | 335 | static __always_inline void * |
@@ -333,7 +337,10 @@ kmem_cache_alloc_node_trace(struct kmem_cache *s, | |||
333 | gfp_t gfpflags, | 337 | gfp_t gfpflags, |
334 | int node, size_t size) | 338 | int node, size_t size) |
335 | { | 339 | { |
336 | return kmem_cache_alloc_node(s, gfpflags, node); | 340 | void *ret = kmem_cache_alloc_node(s, gfpflags, node); |
341 | |||
342 | kasan_kmalloc(s, ret, size); | ||
343 | return ret; | ||
337 | } | 344 | } |
338 | #endif /* CONFIG_TRACING */ | 345 | #endif /* CONFIG_TRACING */ |
339 | 346 | ||