Broken dietlibc-signalhandling with recent FC2 kernel

Enrico Scholz enrico.scholz at informatik.tu-chemnitz.de
Sat Oct 9 21:42:43 UTC 2004


Hello,

the following small program segfaults on the latest FC2 kernel:

| #include <signal.h>
| void handler(int s) {}
| int main()
| {
|   signal(SIGUSR1, handler);
|   kill(getpid(), SIGUSR1);
| }

| $ diet gcc test.c -Wa,--execstack -Wl,-z,execstack
| $ strace /tmp/a.out
| execve("/tmp/a.out", ["/tmp/a.out"], [/* 27 vars */]) = 0
| rt_sigaction(SIGUSR1, {0x80480d4, [USR1], SA_NOMASK}, {SIG_DFL}, 8) = 0
| getpid()                                = 736
| kill(736, SIGUSR1)                      = 0
| --- SIGUSR1 (User defined signal 1) @ 0 (0) ---
| --- SIGSEGV (Segmentation fault) @ 0 (0) ---
| +++ killed by SIGSEGV +++



Things are fine with:
* the latest stable kernel (2.4.27),
* the FC1 kernels,
* the FC2 kernel 2.6.7-1.494.2.2,
* the vanilla 2.6.8.1 kernel.

where I get the expected

| execve("/home/ensc/tmp/a.out", ["/home/ensc/tmp/a.out"], [/* 43 vars */]) = 0
| rt_sigaction(SIGUSR1, {0x80480d4, [USR1], SA_NOMASK}, {SIG_DFL}, 8) = 0
| getpid()                                = 22642
| kill(22642, SIGUSR1)                    = 0
| --- SIGUSR1 (User defined signal 1) @ 0 (0) ---
| sigreturn()                             = ? (mask now [])
| _exit(0)                                = ?


The segfault has been seen on the 2.6.8-1.521 kernel only; rawhide kernels
were not tested yet. Tricks like executing through 'setarch i386', with
'LD_ASSUME_KERNEL=2.2.5', putting '0' into /proc/sys/kernel/exec-shield' or
removing the '-W[al]' options above do not help. Issue has been verified
with both the shipped dietlibc-0.24-4 and a vanilla dietlibc-0.27.

Am I missing a way how I can use dietlibc with FC2?




Enrico




More information about the fedora-devel-list mailing list