linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* binfmt handler issues with emulators
@ 2003-07-30 23:35 Arun Sharma
  0 siblings, 0 replies; only message in thread
From: Arun Sharma @ 2003-07-30 23:35 UTC (permalink / raw)
  To: torvalds, akpm; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 422 bytes --]

Hi Linus/Andrew,

Did you get a chance to see my patch posted to LKML on 7/28 ?

http://marc.theaimsgroup.com/?l=linux-kernel&m=105942737328805&w=2

This is an issue for cases where an interpreter itself may be interpreted (by an emulator).  The current implementation has problems with argument passing and the output of ps (which doesn't match native).

The attached patch fixes the problems for us. Comments ?

	-Arun


[-- Attachment #2: binfmt_interp.patch --]
[-- Type: text/plain, Size: 2349 bytes --]

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-07-30 23:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-07-30 23:35 binfmt handler issues with emulators Arun Sharma

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).