]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/exec.c
[PATCH] sanitize unshare_files/reset_files_struct
[net-next-2.6.git] / fs / exec.c
index 475543002f13847ad7e2ef42eac0d1313c7a837a..b152029f18f61e68e260d63bab4a9720f2e31ab6 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1269,19 +1269,13 @@ int do_execve(char * filename,
        struct linux_binprm *bprm;
        struct file *file;
        unsigned long env_p;
-       struct files_struct *files;
+       struct files_struct *displaced;
        int retval;
 
-       files = current->files;
-       retval = unshare_files();
+       retval = unshare_files(&displaced);
        if (retval)
                goto out_ret;
 
-       if (files == current->files) {
-               put_files_struct(files);
-               files = NULL;
-       }
-
        retval = -ENOMEM;
        bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
        if (!bprm)
@@ -1340,8 +1334,8 @@ int do_execve(char * filename,
                security_bprm_free(bprm);
                acct_update_integrals(current);
                kfree(bprm);
-               if (files)
-                       put_files_struct(files);
+               if (displaced)
+                       put_files_struct(displaced);
                return retval;
        }
 
@@ -1363,8 +1357,8 @@ out_kfree:
        kfree(bprm);
 
 out_files:
-       if (files)
-               reset_files_struct(current, files);
+       if (displaced)
+               reset_files_struct(displaced);
 out_ret:
        return retval;
 }