Fix for shared flat binary format in 2.6.30

From: Bernd Schmidt
Date: Mon Jun 22 2009 - 06:01:33 EST


This fixes a crash in 2.6.30 with shared flat binaries. prepare_binfmt now requires a cred pointer to be set up, which isn't done in binfmt_flat.c.

Signed-off-by: Bernd Schmidt <bernds_cb1@xxxxxxxxxxx>
Acked-by: David Howells <dhowells@xxxxxxxxxx>
--
This footer brought to you by insane German lawmakers.
Analog Devices GmbH Wilhelm-Wagenfeld-Str. 6 80807 Muenchen
Sitz der Gesellschaft Muenchen, Registergericht Muenchen HRB 40368
Geschaeftsfuehrer Thomas Wessel, William A. Martin, Margaret Seif
Index: fs/binfmt_flat.c
===================================================================
--- fs/binfmt_flat.c (revision 6766)
+++ fs/binfmt_flat.c (working copy)
@@ -853,14 +853,23 @@ static int load_flat_shared_library(int
/* Open the file up */
bprm.filename = buf;
bprm.file = open_exec(bprm.filename);
+ bprm.cred = NULL;
res = PTR_ERR(bprm.file);
if (IS_ERR(bprm.file))
return res;

+ bprm.cred = prepare_exec_creds();
+ if (!bprm.cred)
+ goto out;
+
res = prepare_binprm(&bprm);

if (res <= (unsigned long)-4096)
res = load_flat_file(&bprm, libs, id, NULL, NULL);
+out:
+ if (bprm.cred)
+ abort_creds (bprm.cred);
+
if (bprm.file) {
allow_write_access(bprm.file);
fput(bprm.file);