Package: libc
Version: glibc
Severity: important
The following code either (compiled with either gcc 4.2 or 4.3) dies with
EFAULT
(bad address) or spits out some random garbage after the "hello world!".
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
int main(){
pid_t cpid;
cpid = fork();
if (0 == cpid) { // Child
execl("/bin/echo","/bin/echo","hello world!");
perror("execution of /bin/echo failed in "__FILE__);
}
else // Parent
waitpid(cpid,0,0);
return 0;
}
Tracing it with strace -f reveals that execl is internally passing a third
garbage pointer to execve.
....
6368 clone(child_stack=0,
flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x7f187a700770) = 6369
6368 wait4(6369, <unfinished ...>
6369 execve("/bin/echo", ["/bin/echo", "hello world!", 0xffffffffffffffff],
[/*
42 vars */]) = -1 EFAULT (Bad address)
....
-- System Information:
Debian Release: lenny/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.25-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_CA.UTF-8, LC_CTYPE=en_CA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]