Here is a simpler example program: #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <wait.h>
int main(argc, argv) int argc; char **argv; { int pid, rpid; int st; if (argc < 2) { fprintf(stderr, "usage: %s command ...\n", argv[0]); return (1); } if ((pid = fork()) < 0) { fprintf(stderr, "fork: %s\n", strerror(errno)); return (1); } if (pid == 0) { execvp(argv[1], &argv[1]); fprintf(stderr, "exec: %s\n", strerror(errno)); return (1); } while ((rpid = wait(&st)) > 0 && rpid != pid) ; if (rpid < 0) { fprintf(stderr, "wait: %s\n", strerror(errno)); return (1); } printf("status 0x%x\n", st); return (0); } There is some header-file fumble that prevents me from compiling this with cc -m32, but there are both 32- and 64-bit systems in our environment, so: Using kernel 3.13.0-59: Compile it on a 64-bit system, and run ./forkexec date and all is well. Compile it on a 32-bit system, then, on a 64-bit system, run ./forkexec date and date prints nothing, while forkexec reports exit status 0x8b. On the other hand, still on the 64-bit system, point it at a 32-bit binary and all is well. e.g. ./forkexec ./forkexec just prints the expected usage: message, so it execed itself properly; no SIGSEGV. To confound matters further: -- take out the fork (so the program just calls exec) and all is well -- run the program under strace -f and the problem vanishes All this happens under kernel 3.13.0-59 but not 3.13.0-55 (we've put off a few updates). -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1479093 Title: Segfault in ld-2.19.so while starting Steam after upgrade to 3.13.0-59.98 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1479093/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs