summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulia Lawall <julia@diku.dk>2011-05-13 15:52:09 +0200
committerIngo Molnar <mingo@elte.hu>2011-05-13 17:11:02 +0200
commitd9a5ac9ef306eb5cc874f285185a15c303c50009 (patch)
treecceb99495c7e2fb07a24d743fc864e049ca96560
parent77ed23f8d995a01cd8101d84351b567bf5177a30 (diff)
downloadlinux-d9a5ac9ef306eb5cc874f285185a15c303c50009.tar.gz
linux-d9a5ac9ef306eb5cc874f285185a15c303c50009.tar.bz2
linux-d9a5ac9ef306eb5cc874f285185a15c303c50009.zip
x86, mce, AMD: Fix leaving freed data in a list
b may be added to a list, but is not removed before being freed in the case of an error. This is done in the corresponding deallocation function, so the code here has been changed to follow that. The sematic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> @@ expression E,E1,E2; identifier l; @@ *list_add(&E->l,E1); ... when != E1 when != list_del(&E->l) when != list_del_init(&E->l) when != E = E2 *kfree(E);// </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Cc: Borislav Petkov <borislav.petkov@amd.com> Cc: Robert Richter <robert.richter@amd.com> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Andreas Herrmann <andreas.herrmann3@amd.com> Cc: <stable@kernel.org> Link: http://lkml.kernel.org/r/1305294731-12127-1-git-send-email-julia@diku.dk Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce_amd.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
index 167f97b5596e..bb0adad35143 100644
--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
+++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
@@ -509,6 +509,7 @@ recurse:
out_free:
if (b) {
kobject_put(&b->kobj);
+ list_del(&b->miscj);
kfree(b);
}
return err;