aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/kasan.h27
-rw-r--r--include/linux/slab.h11
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);
37void kasan_alloc_pages(struct page *page, unsigned int order); 37void kasan_alloc_pages(struct page *page, unsigned int order);
38void kasan_free_pages(struct page *page, unsigned int order); 38void kasan_free_pages(struct page *page, unsigned int order);
39 39
40void kasan_poison_slab(struct page *page);
41void kasan_unpoison_object_data(struct kmem_cache *cache, void *object);
42void kasan_poison_object_data(struct kmem_cache *cache, void *object);
43
44void kasan_kmalloc_large(const void *ptr, size_t size);
45void kasan_kfree_large(const void *ptr);
46void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size);
47void kasan_krealloc(const void *object, size_t new_size);
48
49void kasan_slab_alloc(struct kmem_cache *s, void *object);
50void kasan_slab_free(struct kmem_cache *s, void *object);
51
40#else /* CONFIG_KASAN */ 52#else /* CONFIG_KASAN */
41 53
42static inline void kasan_unpoison_shadow(const void *address, size_t size) {} 54static inline void kasan_unpoison_shadow(const void *address, size_t size) {}
@@ -47,6 +59,21 @@ static inline void kasan_disable_current(void) {}
47static inline void kasan_alloc_pages(struct page *page, unsigned int order) {} 59static inline void kasan_alloc_pages(struct page *page, unsigned int order) {}
48static inline void kasan_free_pages(struct page *page, unsigned int order) {} 60static inline void kasan_free_pages(struct page *page, unsigned int order) {}
49 61
62static inline void kasan_poison_slab(struct page *page) {}
63static inline void kasan_unpoison_object_data(struct kmem_cache *cache,
64 void *object) {}
65static inline void kasan_poison_object_data(struct kmem_cache *cache,
66 void *object) {}
67
68static inline void kasan_kmalloc_large(void *ptr, size_t size) {}
69static inline void kasan_kfree_large(const void *ptr) {}
70static inline void kasan_kmalloc(struct kmem_cache *s, const void *object,
71 size_t size) {}
72static inline void kasan_krealloc(const void *object, size_t new_size) {}
73
74static inline void kasan_slab_alloc(struct kmem_cache *s, void *object) {}
75static 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
108struct mem_cgroup; 109struct mem_cgroup;
109/* 110/*
@@ -325,7 +326,10 @@ kmem_cache_alloc_node_trace(struct kmem_cache *s,
325static __always_inline void *kmem_cache_alloc_trace(struct kmem_cache *s, 326static __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
331static __always_inline void * 335static __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