diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-12-09 14:33:33 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-02-19 13:46:31 -0300 |
commit | 27d83441a2f900059d0421339d0e8c27220ffa36 (patch) | |
tree | 22b8a2d04bfc965462d96a99b32da18fc17eb2b5 /nptl/Makefile | |
parent | 8d42bf859a289944749d9f978c076cd318119867 (diff) | |
download | glibc-27d83441a2f900059d0421339d0e8c27220ffa36.tar.gz glibc-27d83441a2f900059d0421339d0e8c27220ffa36.tar.xz glibc-27d83441a2f900059d0421339d0e8c27220ffa36.zip |
Block all signals on timer_create thread (BZ#10815)
The behavior of the signal mask on threads created by timer_create for SIGEV_THREAD timers are implementation-defined and glibc explicit unblocks all signals before calling the user-defined function. This behavior, although not incorrect standard-wise, opens a race if a program using a blocked rt-signal plus sigwaitinfo (and without an installed signal handler for the rt-signal) receives a signal while executing the used-defined function for SIGEV_THREAD. A better alternative discussed in bug report is to rather block all signals (besides the internal ones not available to application usage). This patch fixes this issue by only unblocking SIGSETXID (used on set*uid function) and SIGCANCEL (used for thread cancellation). Checked on x86_64-linux-gnu and i686-linux-gnu.
Diffstat (limited to 'nptl/Makefile')
-rw-r--r-- | nptl/Makefile | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/nptl/Makefile b/nptl/Makefile index 9c90af78f1..2911a3de37 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -266,7 +266,7 @@ tests = tst-attr2 tst-attr3 tst-default-attr \ tst-cancel11 tst-cancel12 tst-cancel13 tst-cancel14 tst-cancel15 \ tst-cancel16 tst-cancel17 tst-cancel18 tst-cancel19 tst-cancel20 \ tst-cancel21 tst-cancel22 tst-cancel23 tst-cancel24 \ - tst-cancel26 tst-cancel27 \ + tst-cancel26 tst-cancel27 tst-cancel28 \ tst-cancel-self tst-cancel-self-cancelstate \ tst-cancel-self-canceltype tst-cancel-self-testcancel \ tst-cleanup0 tst-cleanup1 tst-cleanup2 tst-cleanup3 tst-cleanup4 \ @@ -574,6 +574,9 @@ $(objpfx)tst-tls6.out: tst-tls6.sh $(objpfx)tst-tls5 \ $(BASH) $< $(common-objpfx) '$(test-via-rtld-prefix)' \ '$(test-wrapper-env)' '$(run-program-env)' > $@; \ $(evaluate-test) +$(objpfx)tst-cancel28: $(common-objpfx)rt/librt.so +else +$(objpfx)tst-cancel28: $(common-objpfx)rt/librt.a endif $(objpfx)tst-dlsym1: $(libdl) $(shared-thread-library) |