mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-27 14:28:05 +00:00
189ce92b4c
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
48 lines
1.4 KiB
Diff
48 lines
1.4 KiB
Diff
From 71490e8f6f58ec56533554888983ce09d6ee5cb1 Mon Sep 17 00:00:00 2001
|
|
From: Eric Dumazet <eric.dumazet@gmail.com>
|
|
Date: Tue, 13 Dec 2011 04:57:06 +0100
|
|
Subject: [PATCH 042/129] slub: fix a possible memleak in __slab_alloc()
|
|
|
|
commit 73736e0387ba0e6d2b703407b4d26168d31516a7 upstream.
|
|
|
|
Zhihua Che reported a possible memleak in slub allocator on
|
|
CONFIG_PREEMPT=y builds.
|
|
|
|
It is possible current thread migrates right before disabling irqs in
|
|
__slab_alloc(). We must check again c->freelist, and perform a normal
|
|
allocation instead of scratching c->freelist.
|
|
|
|
Many thanks to Zhihua Che for spotting this bug, introduced in 2.6.39
|
|
|
|
V2: Its also possible an IRQ freed one (or several) object(s) and
|
|
populated c->freelist, so its not a CONFIG_PREEMPT only problem.
|
|
|
|
Reported-by: Zhihua Che <zhihua.che@gmail.com>
|
|
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
|
|
Acked-by: Christoph Lameter <cl@linux.com>
|
|
Signed-off-by: Pekka Enberg <penberg@kernel.org>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
mm/slub.c | 5 +++++
|
|
1 file changed, 5 insertions(+)
|
|
|
|
diff --git a/mm/slub.c b/mm/slub.c
|
|
index ed3334d..1a919f0 100644
|
|
--- a/mm/slub.c
|
|
+++ b/mm/slub.c
|
|
@@ -2166,6 +2166,11 @@ redo:
|
|
goto new_slab;
|
|
}
|
|
|
|
+ /* must check again c->freelist in case of cpu migration or IRQ */
|
|
+ object = c->freelist;
|
|
+ if (object)
|
|
+ goto load_freelist;
|
|
+
|
|
stat(s, ALLOC_SLOWPATH);
|
|
|
|
do {
|
|
--
|
|
1.7.9.5
|
|
|