From: Arun Sharma <arun.sharma@intel.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-arch@vger.kernel.org
Subject: Re: [PATCH 2/4] Consolidate do_execve32
Date: Tue, 13 Apr 2004 11:45:50 -0700 [thread overview]
Message-ID: <407C355E.7040009@intel.com> (raw)
In-Reply-To: <200404040222.35467.arnd@arndb.de>
[-- Attachment #1: Type: text/plain, Size: 413 bytes --]
On 4/3/2004 4:22 PM, Arnd Bergmann wrote:
> The code for sys32_execve/do_execve32 in most of the seven versions
> was copied from fs/exec.c but not kept up-to-date. The new
> compat_do_execve() function is based on the mips code and has been
> resync'ed with do_execve().
>
> IA64 has some special fixup code in sys32_execve, so I'm not touching
> that.
>
Attached is a patch that takes care of ia64.
-Arun
[-- Attachment #2: compat_execve_ive.patch --]
[-- Type: text/plain, Size: 3104 bytes --]
diff -purN -X dontdiff linux-2.6.5-compat4/arch/ia64/ia32/sys_ia32.c linux-2.6.5-compat/arch/ia64/ia32/sys_ia32.c
--- linux-2.6.5-compat4/arch/ia64/ia32/sys_ia32.c 2004-04-06 09:54:19.000000000 +0800
+++ linux-2.6.5-compat/arch/ia64/ia32/sys_ia32.c 2004-04-08 15:33:24.000000000 +0800
@@ -90,58 +90,17 @@ extern unsigned long arch_get_unmapped_a
/* XXX make per-mm: */
static DECLARE_MUTEX(ia32_mmap_sem);
-static int
-nargs (unsigned int arg, char **ap)
-{
- unsigned int addr;
- int n, err;
-
- if (!arg)
- return 0;
-
- n = 0;
- do {
- err = get_user(addr, (unsigned int *)A(arg));
- if (err)
- return err;
- if (ap)
- *ap++ = (char *) A(addr);
- arg += sizeof(unsigned int);
- n++;
- } while (addr);
- return n - 1;
-}
-
asmlinkage long
-sys32_execve (char *filename, unsigned int argv, unsigned int envp,
- struct pt_regs *regs)
+sys32_execve (char *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, struct pt_regs *regs)
{
+ long error;
+ char *filename;
unsigned long old_map_base, old_task_size, tssd;
- char **av, **ae;
- int na, ne, len;
- long r;
-
- na = nargs(argv, NULL);
- if (na < 0)
- return na;
- ne = nargs(envp, NULL);
- if (ne < 0)
- return ne;
- len = (na + ne + 2) * sizeof(*av);
- av = kmalloc(len, GFP_KERNEL);
- if (!av)
- return -ENOMEM;
-
- ae = av + na + 1;
- av[na] = NULL;
- ae[ne] = NULL;
- r = nargs(argv, av);
- if (r < 0)
- goto out;
- r = nargs(envp, ae);
- if (r < 0)
- goto out;
+ filename = getname(name);
+ error = PTR_ERR(filename);
+ if (IS_ERR(filename))
+ return error;
old_map_base = current->thread.map_base;
old_task_size = current->thread.task_size;
@@ -152,20 +111,19 @@ sys32_execve (char *filename, unsigned i
current->thread.task_size = DEFAULT_TASK_SIZE;
ia64_set_kr(IA64_KR_IO_BASE, current->thread.old_iob);
ia64_set_kr(IA64_KR_TSSD, current->thread.old_k1);
+
+ error = compat_do_execve(filename, argv, envp, regs);
+ putname(filename);
- set_fs(KERNEL_DS);
- r = sys_execve(filename, av, ae, regs);
- if (r < 0) {
+ if (error < 0) {
/* oops, execve failed, switch back to old values... */
ia64_set_kr(IA64_KR_IO_BASE, IA32_IOBASE);
ia64_set_kr(IA64_KR_TSSD, tssd);
current->thread.map_base = old_map_base;
current->thread.task_size = old_task_size;
- set_fs(USER_DS); /* establish new task-size as the address-limit */
}
- out:
- kfree(av);
- return r;
+
+ return error;
}
int cp_compat_stat(struct kstat *stat, struct compat_stat *ubuf)
diff -purN -X dontdiff linux-2.6.5-compat4/fs/compat.c linux-2.6.5-compat/fs/compat.c
--- linux-2.6.5-compat4/fs/compat.c 2004-04-06 09:54:19.000000000 +0800
+++ linux-2.6.5-compat/fs/compat.c 2004-04-08 18:21:51.000000000 +0800
@@ -981,7 +981,6 @@ out:
return ret;
}
-#ifndef __ia64__ /* ia64 needs some extra tweaks */
/*
* compat_count() counts the number of arguments/envelopes. It is basically
* a copy of count() from fs/exec.c, except that it works with 32 bit argv
@@ -1212,7 +1211,6 @@ out_file:
return retval;
}
-#endif /* !__ia64__ */
#define __COMPAT_NFDBITS (8 * sizeof(compat_ulong_t))
next prev parent reply other threads:[~2004-04-13 18:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200404040204.03594.arnd@arndb.de>
2004-04-04 0:22 ` [PATCH 1/4] Consolidate sys32_readv and sys32_writev Arnd Bergmann
2004-04-04 0:22 ` [PATCH 2/4] Consolidate do_execve32 Arnd Bergmann
2004-04-13 18:45 ` Arun Sharma [this message]
2004-04-04 0:22 ` [PATCH 3/4] Consolidate sys32_select Arnd Bergmann
2004-04-04 10:24 ` Andi Kleen
2004-04-04 10:36 ` Arnd Bergmann
2004-04-04 11:04 ` Andi Kleen
2004-04-04 11:07 ` William Lee Irwin III
2004-04-04 22:51 ` Arnd Bergmann
2004-04-04 23:35 ` Andi Kleen
2004-04-04 23:41 ` Arnd Bergmann
2004-04-07 20:46 ` Arun Sharma
2004-04-08 8:22 ` Arnd Bergmann
2004-04-12 18:55 ` Arun Sharma
2004-04-04 0:22 ` [PATCH 4/4] Consolidate sys32_nfsservctl Arnd Bergmann
2004-04-16 16:00 consolidate compat readv/writev/execve/select/nfsservctl [v2] Arnd Bergmann
2004-04-16 16:04 ` [PATCH 2/4] Consolidate do_execve32 Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=407C355E.7040009@intel.com \
--to=arun.sharma@intel.com \
--cc=arnd@arndb.de \
--cc=linux-arch@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.