From: David Howells <dhowells@redhat.com>
Date: Tue, 20 Apr 2010 21:41:18 +0000 (+0100)
Subject: CRED: Fix double free in prepare_usermodehelper_creds() error handling
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=eff30363c0b8b057f773108589bfd8881659fe74;p=GitHub%2FLineageOS%2Fandroid_kernel_samsung_universal7580.git

CRED: Fix double free in prepare_usermodehelper_creds() error handling

Patch 570b8fb505896e007fd3bb07573ba6640e51851d:

	Author: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
	Date:   Tue Mar 30 00:04:00 2010 +0100
	Subject: CRED: Fix memory leak in error handling

attempts to fix a memory leak in the error handling by making the offending
return statement into a jump down to the bottom of the function where a
kfree(tgcred) is inserted.

This is, however, incorrect, as it does a kfree() after doing put_cred() if
security_prepare_creds() fails.  That will result in a double free if 'error'
is jumped to as put_cred() will also attempt to free the new tgcred record by
virtue of it being pointed to by the new cred record.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: James Morris <jmorris@namei.org>
---

diff --git a/kernel/cred.c b/kernel/cred.c
index e1dbe9eef80..ce1a52b9e8a 100644
--- a/kernel/cred.c
+++ b/kernel/cred.c
@@ -398,6 +398,8 @@ struct cred *prepare_usermodehelper_creds(void)
 
 error:
 	put_cred(new);
+	return NULL;
+
 free_tgcred:
 #ifdef CONFIG_KEYS
 	kfree(tgcred);