Index: mm/slab_common.c |
diff --git a/mm/slab_common.c b/mm/slab_common.c |
index 01a0fe2eb33267f8f04f7e90fd79358cd1f41d07..4545975b1929157f86e0b3225e66ec6d6095c8c8 100644 |
--- a/mm/slab_common.c |
+++ b/mm/slab_common.c |
@@ -1112,9 +1112,16 @@ void *kmalloc_order(size_t size, gfp_t flags, unsigned int order) |
flags |= __GFP_COMP; |
page = alloc_pages(flags, order); |
- ret = page ? page_address(page) : NULL; |
+ if (!page) |
+ return NULL; |
+ |
+ ret = page_address(page); |
+ if (kasan_kmalloc_large(ret, size, flags)) { |
+ __free_pages(page, order); |
+ return NULL; |
+ } |
+ |
kmemleak_alloc(ret, size, 1, flags); |
- kasan_kmalloc_large(ret, size, flags); |
return ret; |
} |
EXPORT_SYMBOL(kmalloc_order); |