mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-31 14:01:18 +08:00
nptl: Install SIGSETXID handler with SA_ONSTACK [BZ #27914]
The signal is sent to all threads, some of which may have switched to very small stacks. If they have also installed an alternate signal stack, SA_ONSTACK makes this work. The Go runtime needs this: runtime: C.setuid/C.setgid smashes Go stack <https://github.com/golang/go/issues/9400> Doing this for SIGCANCEL is less obviously beneficial and needs further testing. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
4f26956d5b
commit
76b0c59e33
@ -83,9 +83,12 @@ late_init (void)
|
||||
(void) __libc_sigaction (SIGCANCEL, &sa, NULL);
|
||||
}
|
||||
|
||||
/* Install the handle to change the threads' uid/gid. */
|
||||
/* Install the handle to change the threads' uid/gid. Use
|
||||
SA_ONSTACK because the signal may be sent to threads that are
|
||||
running with custom stacks. (This is less likely for
|
||||
SIGCANCEL.) */
|
||||
sa.sa_sigaction = __nptl_setxid_sighandler;
|
||||
sa.sa_flags = SA_SIGINFO | SA_RESTART;
|
||||
sa.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESTART;
|
||||
(void) __libc_sigaction (SIGSETXID, &sa, NULL);
|
||||
|
||||
/* The parent process might have left the signals blocked. Just in
|
||||
|
Loading…
x
Reference in New Issue
Block a user