Adhemerval Zanella
d40ac01cbb
stdlib: Make abort/_Exit AS-safe (BZ 26275)
...
The recursive lock used on abort does not synchronize with a new process
creation (either by fork-like interfaces or posix_spawn ones), nor it
is reinitialized after fork().
Also, the SIGABRT unblock before raise() shows another race condition,
where a fork or posix_spawn() call by another thread, just after the
recursive lock release and before the SIGABRT signal, might create
programs with a non-expected signal mask. With the default option
(without POSIX_SPAWN_SETSIGDEF), the process can see SIG_DFL for
SIGABRT, where it should be SIG_IGN.
To fix the AS-safe, raise() does not change the process signal mask,
and an AS-safe lock is used if a SIGABRT is installed or the process
is blocked or ignored. With the signal mask change removal,
there is no need to use a recursive loc. The lock is also taken on
both _Fork() and posix_spawn(), to avoid the spawn process to see the
abort handler as SIG_DFL.
A read-write lock is used to avoid serialize _Fork and posix_spawn
execution. Both sigaction (SIGABRT) and abort() requires to lock
as writer (since both change the disposition).
The fallback is also simplified: there is no need to use a loop of
ABORT_INSTRUCTION after _exit() (if the syscall does not terminate the
process, the system is broken).
The proposed fix changes how setjmp works on a SIGABRT handler, where
glibc does not save the signal mask. So usage like the below will now
always abort.
static volatile int chk_fail_ok;
static jmp_buf chk_fail_buf;
static void
handler (int sig)
{
if (chk_fail_ok)
{
chk_fail_ok = 0;
longjmp (chk_fail_buf, 1);
}
else
_exit (127);
}
[...]
signal (SIGABRT, handler);
[....]
chk_fail_ok = 1;
if (! setjmp (chk_fail_buf))
{
// Something that can calls abort, like a failed fortify function.
chk_fail_ok = 0;
printf ("FAIL\n");
}
Such cases will need to use sigsetjmp instead.
The _dl_start_profile calls sigaction through _profil, and to avoid
pulling abort() on loader the call is replaced with __libc_sigaction.
Checked on x86_64-linux-gnu and aarch64-linux-gnu.
Reviewed-by: DJ Delorie <dj@redhat.com>
2024-10-08 14:40:12 -03:00
..
2024-08-05 16:49:58 +02:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-10-08 14:40:12 -03:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-07-08 10:05:10 -03:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2017-12-20 16:55:26 -02:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-06-03 19:04:58 +02:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-05 17:07:57 -03:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-27 12:38:01 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-02-01 11:02:01 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-06 14:01:27 -03:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-23 05:17:31 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-31 19:17:27 +01:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-02-01 11:02:01 +00:00
2024-07-31 14:26:00 +08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-27 12:41:02 +00:00
2024-09-04 13:21:23 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-02-01 11:02:01 +00:00
2024-02-01 11:02:01 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-02-01 11:02:01 +00:00
2024-01-01 10:53:40 -08:00
2024-02-01 11:02:01 +00:00
2024-01-01 10:53:40 -08:00
2024-02-01 11:02:01 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2021-09-03 22:06:44 +05:30
2022-06-22 11:12:33 -07:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-05 17:07:57 -03:00
2024-08-05 17:07:57 -03:00
2024-08-05 17:07:57 -03:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-03-23 08:36:28 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-16 11:00:51 -03:00
2024-01-01 10:53:40 -08:00
2021-09-03 22:06:44 +05:30
2024-01-01 10:53:40 -08:00
2022-03-31 09:13:14 -03:00
2024-01-01 10:53:40 -08:00
2023-06-02 01:39:48 +00:00
2023-08-03 22:43:27 +02:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-31 19:17:27 +01:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-01-03 12:07:14 +00:00
2024-02-08 08:13:37 +01:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-27 20:41:54 +00:00
2024-09-20 23:24:45 +00:00
2024-08-27 20:41:54 +00:00
2024-08-27 20:41:54 +00:00
2024-09-20 23:23:13 +00:00
2024-08-27 20:41:54 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-08-27 12:41:02 +00:00
2024-08-27 12:41:02 +00:00
2024-08-27 12:38:01 +00:00
2024-01-01 10:53:40 -08:00
2024-09-20 23:25:32 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-02-01 11:02:01 +00:00
2024-02-01 17:55:57 +00:00
2024-02-01 11:02:01 +00:00
2024-02-01 17:55:57 +00:00
2024-02-01 11:02:01 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-07-19 10:10:17 -04:00
2024-08-16 16:05:20 +02:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-03 12:07:14 +00:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00
2024-01-01 10:53:40 -08:00