* sys32_execve fix
@ 2002-07-22 13:52 Carsten Langgaard
2002-07-22 14:46 ` Carsten Langgaard
2002-07-22 16:56 ` Maciej W. Rozycki
0 siblings, 2 replies; 6+ messages in thread
From: Carsten Langgaard @ 2002-07-22 13:52 UTC (permalink / raw)
To: Ralf Baechle, Maciej W. Rozycki, linux-mips
[-- Attachment #1: Type: text/plain, Size: 671 bytes --]
The following test fails on the 64-bit kernel:
#include <unistd.h>
#include <errno.h>
main(void)
{
int ret;
ret = execve("/bin/ls", NULL, NULL);
printf("ret = %d, errno = %d\n", ret, errno);
}
The problem is that "nargs" in arch/mips64/kernel/linux32.c fails when
argv is NULL, the patch below should fix the problem:
/Carsten
--
_ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
|\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
| \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
Denmark http://www.mips.com
[-- Attachment #2: linux32.patch --]
[-- Type: text/plain, Size: 777 bytes --]
Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.6
diff -u -r1.42.2.6 linux32.c
--- arch/mips64/kernel/linux32.c 2002/07/01 00:17:14 1.42.2.6
+++ arch/mips64/kernel/linux32.c 2002/07/22 13:49:33
@@ -411,12 +411,14 @@
int n, ret;
n = 0;
+ ptr = NULL;
do {
/* egcs is stupid */
if (!access_ok(VERIFY_READ, arg, sizeof (unsigned int)))
return -EFAULT;
- if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg))))
- return ret;
+ if (arg)
+ if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg))))
+ return ret;
if (ap) /* no access_ok needed, we allocated */
if (IS_ERR(ret = __put_user(ptr, ap++)))
return ret;
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: sys32_execve fix 2002-07-22 13:52 sys32_execve fix Carsten Langgaard @ 2002-07-22 14:46 ` Carsten Langgaard 2002-07-23 9:19 ` Carsten Langgaard 2002-07-22 16:56 ` Maciej W. Rozycki 1 sibling, 1 reply; 6+ messages in thread From: Carsten Langgaard @ 2002-07-22 14:46 UTC (permalink / raw) To: Ralf Baechle, Maciej W. Rozycki, linux-mips [-- Attachment #1: Type: text/plain, Size: 2595 bytes --] I just found another problem in the linux32.c file. I believe the "flock32" structure has been copied from other architecture, but we are little bit different, so it need a fix. The patch below should fix that problem, please notice it also include the previous patch I send. Maybe it would be even better to put the "flock32" structure definition in include/asm-mips64/fcntl.h instead. /Carsten Carsten Langgaard wrote: > The following test fails on the 64-bit kernel: > > #include <unistd.h> > #include <errno.h> > > main(void) > { > int ret; > > ret = execve("/bin/ls", NULL, NULL); > printf("ret = %d, errno = %d\n", ret, errno); > } > > The problem is that "nargs" in arch/mips64/kernel/linux32.c fails when > argv is NULL, the patch below should fix the problem: > > /Carsten > > -- > _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com > |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527 > | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555 > TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556 > Denmark http://www.mips.com > > ------------------------------------------------------------------------ > Index: arch/mips64/kernel/linux32.c > =================================================================== > RCS file: /cvs/linux/arch/mips64/kernel/linux32.c,v > retrieving revision 1.42.2.6 > diff -u -r1.42.2.6 linux32.c > --- arch/mips64/kernel/linux32.c 2002/07/01 00:17:14 1.42.2.6 > +++ arch/mips64/kernel/linux32.c 2002/07/22 13:49:33 > @@ -411,12 +411,14 @@ > int n, ret; > > n = 0; > + ptr = NULL; > do { > /* egcs is stupid */ > if (!access_ok(VERIFY_READ, arg, sizeof (unsigned int))) > return -EFAULT; > - if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) > - return ret; > + if (arg) > + if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) > + return ret; > if (ap) /* no access_ok needed, we allocated */ > if (IS_ERR(ret = __put_user(ptr, ap++))) > return ret; -- _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527 | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555 TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556 Denmark http://www.mips.com [-- Attachment #2: linux32.patch --] [-- Type: text/plain, Size: 1021 bytes --] Index: arch/mips64/kernel/linux32.c =================================================================== RCS file: /cvs/linux/arch/mips64/kernel/linux32.c,v retrieving revision 1.42.2.6 diff -u -r1.42.2.6 linux32.c --- arch/mips64/kernel/linux32.c 2002/07/01 00:17:14 1.42.2.6 +++ arch/mips64/kernel/linux32.c 2002/07/22 14:40:04 @@ -411,12 +411,14 @@ int n, ret; n = 0; + ptr = NULL; do { /* egcs is stupid */ if (!access_ok(VERIFY_READ, arg, sizeof (unsigned int))) return -EFAULT; - if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) - return ret; + if (arg) + if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) + return ret; if (ap) /* no access_ok needed, we allocated */ if (IS_ERR(ret = __put_user(ptr, ap++))) return ret; @@ -1406,8 +1408,9 @@ short l_whence; __kernel_off_t32 l_start; __kernel_off_t32 l_len; + int l_sysid; __kernel_pid_t32 l_pid; - short __unused; + int pad[4]; }; static inline int get_flock(struct flock *kfl, struct flock32 *ufl) ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sys32_execve fix 2002-07-22 14:46 ` Carsten Langgaard @ 2002-07-23 9:19 ` Carsten Langgaard 2002-07-23 11:39 ` Ralf Baechle 0 siblings, 1 reply; 6+ messages in thread From: Carsten Langgaard @ 2002-07-23 9:19 UTC (permalink / raw) To: Ralf Baechle, Maciej W. Rozycki, linux-mips Ralf, I can see you check in the fix Maciej suggested, thanks. But what about the flock32 structure, will you fix that too ? /Carsten Carsten Langgaard wrote: > I just found another problem in the linux32.c file. > I believe the "flock32" structure has been copied from other architecture, but we > are little bit different, so it need a fix. > The patch below should fix that problem, please notice it also include the > previous patch I send. > > Maybe it would be even better to put the "flock32" structure definition in > include/asm-mips64/fcntl.h instead. > > /Carsten > > Carsten Langgaard wrote: > > > The following test fails on the 64-bit kernel: > > > > #include <unistd.h> > > #include <errno.h> > > > > main(void) > > { > > int ret; > > > > ret = execve("/bin/ls", NULL, NULL); > > printf("ret = %d, errno = %d\n", ret, errno); > > } > > > > The problem is that "nargs" in arch/mips64/kernel/linux32.c fails when > > argv is NULL, the patch below should fix the problem: > > > > /Carsten > > > > -- > > _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com > > |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527 > > | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555 > > TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556 > > Denmark http://www.mips.com > > > > ------------------------------------------------------------------------ > > Index: arch/mips64/kernel/linux32.c > > =================================================================== > > RCS file: /cvs/linux/arch/mips64/kernel/linux32.c,v > > retrieving revision 1.42.2.6 > > diff -u -r1.42.2.6 linux32.c > > --- arch/mips64/kernel/linux32.c 2002/07/01 00:17:14 1.42.2.6 > > +++ arch/mips64/kernel/linux32.c 2002/07/22 13:49:33 > > @@ -411,12 +411,14 @@ > > int n, ret; > > > > n = 0; > > + ptr = NULL; > > do { > > /* egcs is stupid */ > > if (!access_ok(VERIFY_READ, arg, sizeof (unsigned int))) > > return -EFAULT; > > - if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) > > - return ret; > > + if (arg) > > + if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) > > + return ret; > > if (ap) /* no access_ok needed, we allocated */ > > if (IS_ERR(ret = __put_user(ptr, ap++))) > > return ret; > > -- > _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com > |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527 > | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555 > TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556 > Denmark http://www.mips.com > > ------------------------------------------------------------------------ > Index: arch/mips64/kernel/linux32.c > =================================================================== > RCS file: /cvs/linux/arch/mips64/kernel/linux32.c,v > retrieving revision 1.42.2.6 > diff -u -r1.42.2.6 linux32.c > --- arch/mips64/kernel/linux32.c 2002/07/01 00:17:14 1.42.2.6 > +++ arch/mips64/kernel/linux32.c 2002/07/22 14:40:04 > @@ -411,12 +411,14 @@ > int n, ret; > > n = 0; > + ptr = NULL; > do { > /* egcs is stupid */ > if (!access_ok(VERIFY_READ, arg, sizeof (unsigned int))) > return -EFAULT; > - if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) > - return ret; > + if (arg) > + if (IS_ERR(ret = __get_user((long)ptr,(int *)A(arg)))) > + return ret; > if (ap) /* no access_ok needed, we allocated */ > if (IS_ERR(ret = __put_user(ptr, ap++))) > return ret; > @@ -1406,8 +1408,9 @@ > short l_whence; > __kernel_off_t32 l_start; > __kernel_off_t32 l_len; > + int l_sysid; > __kernel_pid_t32 l_pid; > - short __unused; > + int pad[4]; > }; > > static inline int get_flock(struct flock *kfl, struct flock32 *ufl) -- _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527 | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555 TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556 Denmark http://www.mips.com ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sys32_execve fix 2002-07-23 9:19 ` Carsten Langgaard @ 2002-07-23 11:39 ` Ralf Baechle 0 siblings, 0 replies; 6+ messages in thread From: Ralf Baechle @ 2002-07-23 11:39 UTC (permalink / raw) To: Carsten Langgaard; +Cc: Maciej W. Rozycki, linux-mips On Tue, Jul 23, 2002 at 11:19:38AM +0200, Carsten Langgaard wrote: > > The patch below should fix that problem, please notice it also include the > > previous patch I send. > > > > Maybe it would be even better to put the "flock32" structure definition in > > include/asm-mips64/fcntl.h instead. Yep, did that. The patch I'm actually going to check in has become quite a bit larger as I did the quite some cleanup to that file. Ralf ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sys32_execve fix 2002-07-22 13:52 sys32_execve fix Carsten Langgaard 2002-07-22 14:46 ` Carsten Langgaard @ 2002-07-22 16:56 ` Maciej W. Rozycki 2002-07-22 18:36 ` Ralf Baechle 1 sibling, 1 reply; 6+ messages in thread From: Maciej W. Rozycki @ 2002-07-22 16:56 UTC (permalink / raw) To: Carsten Langgaard; +Cc: Ralf Baechle, linux-mips On Mon, 22 Jul 2002, Carsten Langgaard wrote: > The problem is that "nargs" in arch/mips64/kernel/linux32.c fails when > argv is NULL, the patch below should fix the problem: How about just: if (!arg) return 0; at the top? Gcc should optimize it to a single branch, likely not taken, and a register move. -- + Maciej W. Rozycki, Technical University of Gdansk, Poland + +--------------------------------------------------------------+ + e-mail: macro@ds2.pg.gda.pl, PGP key available + ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sys32_execve fix 2002-07-22 16:56 ` Maciej W. Rozycki @ 2002-07-22 18:36 ` Ralf Baechle 0 siblings, 0 replies; 6+ messages in thread From: Ralf Baechle @ 2002-07-22 18:36 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Carsten Langgaard, linux-mips On Mon, Jul 22, 2002 at 06:56:42PM +0200, Maciej W. Rozycki wrote: > > The problem is that "nargs" in arch/mips64/kernel/linux32.c fails when > > argv is NULL, the patch below should fix the problem: > > How about just: > > if (!arg) > return 0; > > at the top? Gcc should optimize it to a single branch, likely not taken, > and a register move. Right. Coincidentally this is also what was done to the IA64 port where this code did originate. Ralf ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2002-07-23 12:17 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2002-07-22 13:52 sys32_execve fix Carsten Langgaard 2002-07-22 14:46 ` Carsten Langgaard 2002-07-23 9:19 ` Carsten Langgaard 2002-07-23 11:39 ` Ralf Baechle 2002-07-22 16:56 ` Maciej W. Rozycki 2002-07-22 18:36 ` Ralf Baechle
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox