|
@@ -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);
|
|
|
|