summaryrefslogtreecommitdiffstats
path: root/mm/slab.c
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-02-06 18:36:27 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-02-06 21:32:43 -0500
commitee3ce779b58c31acacdfab0ad6c86d428ba2c2e3 (patch)
treee27239a0a81672dfea5f70c893fb92f3615ca47e /mm/slab.c
parent47adccce3e8a31d315f47183ab1185862b2fc5d4 (diff)
kasan: don't use __builtin_return_address(1)
__builtin_return_address(1) is unreliable without frame pointers. With defconfig on kmalloc_pagealloc_invalid_free test I am getting: BUG: KASAN: double-free or invalid-free in (null) Pass caller PC from callers explicitly. Link: http://lkml.kernel.org/r/9b01bc2d237a4df74ff8472a3bf6b7635908de01.1514378558.git.dvyukov@google.com Signed-off-by: Dmitry Vyukov <dvyukov@google.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>a Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/slab.c')
-rw-r--r--mm/slab.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/mm/slab.c b/mm/slab.c
index cd86f15071ad..324446621b3e 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3478,11 +3478,11 @@ free_done:
3478 * Release an obj back to its cache. If the obj has a constructed state, it must 3478 * Release an obj back to its cache. If the obj has a constructed state, it must
3479 * be in this state _before_ it is released. Called with disabled ints. 3479 * be in this state _before_ it is released. Called with disabled ints.
3480 */ 3480 */
3481static inline void __cache_free(struct kmem_cache *cachep, void *objp, 3481static __always_inline void __cache_free(struct kmem_cache *cachep, void *objp,
3482 unsigned long caller) 3482 unsigned long caller)
3483{ 3483{
3484 /* Put the object into the quarantine, don't touch it for now. */ 3484 /* Put the object into the quarantine, don't touch it for now. */
3485 if (kasan_slab_free(cachep, objp)) 3485 if (kasan_slab_free(cachep, objp, _RET_IP_))
3486 return; 3486 return;
3487 3487
3488 ___cache_free(cachep, objp, caller); 3488 ___cache_free(cachep, objp, caller);