Refactor Linux raise implementation (BZ#15368)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 22 Apr 2016 12:25:20 +0000 (09:25 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.com>
Wed, 13 Jul 2016 16:08:51 +0000 (17:08 +0100)
commit2ac88eecc57ff00e0b5ff803ebcc3465d2d640dd
tree5b425337c8ccc0f0cb878df1f599fa3a2974f01d
parente15eaa8f335ebfd565ab7752c64f3415d427d9b2
Refactor Linux raise implementation (BZ#15368)

This patch changes both the nptl and libc Linux raise implementation
to avoid the issues described in BZ#15368.  The strategy used is
summarized in bug report first comment:

 1. Block all signals (including internal NPTL ones);
 2. Get pid and tid directly from syscall (not relying on cached
    values);
 3. Call tgkill;
 4. Restore old signal mask.

Tested on x86_64 and i686.

[BZ #15368]
* sysdeps/unix/sysv/linux/nptl-signals.h
(__nptl_clear_internal_signals): New function.
(__libc_signal_block_all): Likewise.
(__libc_signal_block_app): Likewise.
(__libc_signal_restore_set): Likewise.
* sysdeps/unix/sysv/linux/pt-raise.c (raise): Use Linux raise.c
implementation.
* sysdeps/unix/sysv/linux/raise.c (raise): Reimplement to not use
the cached pid/tid value in pthread structure.
ChangeLog
sysdeps/unix/sysv/linux/nptl-signals.h
sysdeps/unix/sysv/linux/pt-raise.c
sysdeps/unix/sysv/linux/raise.c