--- linux/fs/exec.c- Thu Mar 13 11:42:51 2003 +++ linux/fs/exec.c Thu Mar 13 11:43:05 2003 @@ -882,6 +882,7 @@ bprm.file = file; bprm.filename = filename; + bprm.interp = filename; bprm.sh_bang = 0; bprm.loader = 0; bprm.exec = 0; --- linux/fs/binfmt_script.c- Thu Mar 13 12:09:28 2003 +++ linux/fs/binfmt_script.c Thu Mar 13 12:09:46 2003 @@ -78,6 +78,8 @@ retval = copy_strings_kernel(1, &i_name, bprm); if (retval) return retval; bprm->argc++; + bprm->interp = interp; + /* * OK, now restart the process with the interpreter's dentry. */ --- linux/include/linux/binfmts.h- Thu Mar 13 11:40:41 2003 +++ linux/include/linux/binfmts.h Thu Mar 13 11:42:05 2003 @@ -30,7 +30,10 @@ int e_uid, e_gid; kernel_cap_t cap_inheritable, cap_permitted, cap_effective; int argc, envc; - char * filename; /* Name of binary */ + char * filename; /* Name of binary as seen by procps */ + char * interp; /* Name of the binary really executed. Most + of the time same as filename, but could be + different for binfmt_{misc,script} */ unsigned long loader, exec; }; --- linux/fs/binfmt_script.c- Mon Mar 17 08:10:56 2003 +++ linux/fs/binfmt_script.c Mon Mar 17 08:13:07 2003 @@ -67,7 +67,7 @@ * user environment and arguments are stored. */ remove_arg_zero(bprm); - retval = copy_strings_kernel(1, &bprm->filename, bprm); + retval = copy_strings_kernel(1, &bprm->interp, bprm); if (retval < 0) return retval; bprm->argc++; if (i_arg) { --- linux/fs/binfmt_misc.c.orig Wed Mar 19 15:45:34 2003 +++ linux/fs/binfmt_misc.c Wed Mar 19 15:49:39 2003 @@ -58,7 +58,7 @@ */ static Node *check_file(struct linux_binprm *bprm) { - char *p = strrchr(bprm->filename, '.'); + char *p = strrchr(bprm->interp, '.'); struct list_head *l; for (l = entries.next; l != &entries; l = l->next) { @@ -125,13 +125,13 @@ if (!(fmt->flags & MISC_FMT_PRESERVE_ARGV0)) { remove_arg_zero(bprm); } - retval = copy_strings_kernel(1, &bprm->filename, bprm); + retval = copy_strings_kernel(1, &bprm->interp, bprm); if (retval < 0) goto _ret; bprm->argc++; retval = copy_strings_kernel(1, &iname_addr, bprm); if (retval < 0) goto _ret; bprm->argc++; - bprm->filename = iname; /* for binfmt_script */ + bprm->interp = iname; /* for binfmt_script */ file = open_exec(iname); retval = PTR_ERR(file);