aboutsummaryrefslogtreecommitdiffstats
path: root/fs/binfmt_misc.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-25 22:05:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-25 22:05:55 -0400
commitbc84e0a160e383deb56568f4e03bc51b1ce16775 (patch)
tree3c8cf1ae23c2f9c165bd7ce63a40b1d5c3aee275 /fs/binfmt_misc.c
parenta92910723a5af54f81373875fd95133c88df94bd (diff)
parentf8f95702f0c4529b0f59488f4509608f0c160e77 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: [PATCH] sanitize locate_fd() [PATCH] sanitize unshare_files/reset_files_struct [PATCH] sanitize handling of shared descriptor tables in failing execve() [PATCH] close race in unshare_files() [PATCH] restore sane ->umount_begin() API cifs: timeout dfs automounts +little fix.
Diffstat (limited to 'fs/binfmt_misc.c')
-rw-r--r--fs/binfmt_misc.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index b53c7e5f41bb..dbf0ac0523de 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -110,7 +110,6 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
110 char *iname_addr = iname; 110 char *iname_addr = iname;
111 int retval; 111 int retval;
112 int fd_binary = -1; 112 int fd_binary = -1;
113 struct files_struct *files = NULL;
114 113
115 retval = -ENOEXEC; 114 retval = -ENOEXEC;
116 if (!enabled) 115 if (!enabled)
@@ -133,21 +132,13 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
133 132
134 if (fmt->flags & MISC_FMT_OPEN_BINARY) { 133 if (fmt->flags & MISC_FMT_OPEN_BINARY) {
135 134
136 files = current->files;
137 retval = unshare_files();
138 if (retval < 0)
139 goto _ret;
140 if (files == current->files) {
141 put_files_struct(files);
142 files = NULL;
143 }
144 /* if the binary should be opened on behalf of the 135 /* if the binary should be opened on behalf of the
145 * interpreter than keep it open and assign descriptor 136 * interpreter than keep it open and assign descriptor
146 * to it */ 137 * to it */
147 fd_binary = get_unused_fd(); 138 fd_binary = get_unused_fd();
148 if (fd_binary < 0) { 139 if (fd_binary < 0) {
149 retval = fd_binary; 140 retval = fd_binary;
150 goto _unshare; 141 goto _ret;
151 } 142 }
152 fd_install(fd_binary, bprm->file); 143 fd_install(fd_binary, bprm->file);
153 144
@@ -205,10 +196,6 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
205 if (retval < 0) 196 if (retval < 0)
206 goto _error; 197 goto _error;
207 198
208 if (files) {
209 put_files_struct(files);
210 files = NULL;
211 }
212_ret: 199_ret:
213 return retval; 200 return retval;
214_error: 201_error:
@@ -216,9 +203,6 @@ _error:
216 sys_close(fd_binary); 203 sys_close(fd_binary);
217 bprm->interp_flags = 0; 204 bprm->interp_flags = 0;
218 bprm->interp_data = 0; 205 bprm->interp_data = 0;
219_unshare:
220 if (files)
221 reset_files_struct(current, files);
222 goto _ret; 206 goto _ret;
223} 207}
224 208