diff options
Diffstat (limited to 'fs/binfmt_script.c')
| -rw-r--r-- | fs/binfmt_script.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c index 396a9884591..5027a3e1492 100644 --- a/fs/binfmt_script.c +++ b/fs/binfmt_script.c @@ -14,7 +14,7 @@  #include <linux/err.h>  #include <linux/fs.h> -static int load_script(struct linux_binprm *bprm,struct pt_regs *regs) +static int load_script(struct linux_binprm *bprm)  {  	const char *i_arg, *i_name;  	char *cp; @@ -22,15 +22,13 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)  	char interp[BINPRM_BUF_SIZE];  	int retval; -	if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') || -	    (bprm->recursion_depth > BINPRM_MAX_RECURSION)) +	if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))  		return -ENOEXEC;  	/*  	 * This section does the #! interpretation.  	 * Sorta complicated, but hopefully it will work.  -TYT  	 */ -	bprm->recursion_depth++;  	allow_write_access(bprm->file);  	fput(bprm->file);  	bprm->file = NULL; @@ -82,7 +80,9 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)  	retval = copy_strings_kernel(1, &i_name, bprm);  	if (retval) return retval;   	bprm->argc++; -	bprm->interp = interp; +	retval = bprm_change_interp(interp, bprm); +	if (retval < 0) +		return retval;  	/*  	 * OK, now restart the process with the interpreter's dentry. @@ -95,7 +95,7 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)  	retval = prepare_binprm(bprm);  	if (retval < 0)  		return retval; -	return search_binary_handler(bprm,regs); +	return search_binary_handler(bprm);  }  static struct linux_binfmt script_format = { @@ -105,7 +105,8 @@ static struct linux_binfmt script_format = {  static int __init init_script_binfmt(void)  { -	return register_binfmt(&script_format); +	register_binfmt(&script_format); +	return 0;  }  static void __exit exit_script_binfmt(void)  | 
