diff options
Diffstat (limited to 'fs/binfmt_script.c')
| -rw-r--r-- | fs/binfmt_script.c | 17 | 
1 files changed, 9 insertions, 8 deletions
| diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c index afdf4e3cafc2..7cde3f46ad26 100644 --- a/fs/binfmt_script.c +++ b/fs/binfmt_script.c @@ -19,7 +19,6 @@ static int load_script(struct linux_binprm *bprm)  	const char *i_arg, *i_name;  	char *cp;  	struct file *file; -	char interp[BINPRM_BUF_SIZE];  	int retval;  	if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!')) @@ -55,7 +54,7 @@ static int load_script(struct linux_binprm *bprm)  			break;  	}  	for (cp = bprm->buf+2; (*cp == ' ') || (*cp == '\t'); cp++); -	if (*cp == '\0')  +	if (*cp == '\0')  		return -ENOEXEC; /* No interpreter name found */  	i_name = cp;  	i_arg = NULL; @@ -65,7 +64,6 @@ static int load_script(struct linux_binprm *bprm)  		*cp++ = '\0';  	if (*cp)  		i_arg = cp; -	strcpy (interp, i_name);  	/*  	 * OK, we've parsed out the interpreter name and  	 * (optional) argument. @@ -80,24 +78,27 @@ static int load_script(struct linux_binprm *bprm)  	if (retval)  		return retval;  	retval = copy_strings_kernel(1, &bprm->interp, bprm); -	if (retval < 0) return retval;  +	if (retval < 0) +		return retval;  	bprm->argc++;  	if (i_arg) {  		retval = copy_strings_kernel(1, &i_arg, bprm); -		if (retval < 0) return retval;  +		if (retval < 0) +			return retval;  		bprm->argc++;  	}  	retval = copy_strings_kernel(1, &i_name, bprm); -	if (retval) return retval;  +	if (retval) +		return retval;  	bprm->argc++; -	retval = bprm_change_interp(interp, bprm); +	retval = bprm_change_interp(i_name, bprm);  	if (retval < 0)  		return retval;  	/*  	 * OK, now restart the process with the interpreter's dentry.  	 */ -	file = open_exec(interp); +	file = open_exec(i_name);  	if (IS_ERR(file))  		return PTR_ERR(file); | 
