summaryrefslogtreecommitdiffstats
path: root/contrib/gcclibs/libcpp
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-11-23 15:48:17 +0000
committerkib <kib@FreeBSD.org>2013-11-23 15:48:17 +0000
commit390cac2ec15e166c883a2734e03f3e34bae6e1f8 (patch)
treefb93e62e7349c113134117155612ff51dc329b6c /contrib/gcclibs/libcpp
parent21d101ccc523a786a6b5d18d7d784eae8017e9c5 (diff)
downloadFreeBSD-src-390cac2ec15e166c883a2734e03f3e34bae6e1f8.zip
FreeBSD-src-390cac2ec15e166c883a2734e03f3e34bae6e1f8.tar.gz
If check_deferred_signal() execution needs binding of PLT symbol,
unlocking the rtld bind lock results in the processing of ast and recursing into the check_deferred_signal(). Nested execution of check_deferred_signal() delivers the signal to user code and clears si_signo. On return, top-level check_deferred_signal() frame continues delivering the same signal one more time, but now with zero si_signo. Fix this by adding a flag to indicate that deferred delivery is running, so check_deferred_signal() should avoid doing anything. Since user signal handler is allowed to modify the passed machine context to make return from the signal handler to cause arbitrary jump, or do longjmp(). For this case, also clear the flag in thr_sighandler(), since kernel signal delivery means that nested delivery code should not run right now. Reported by: Vitaly Magerya <vmagerya@gmail.com> Reviewed by: davidxu, jilles Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week
Diffstat (limited to 'contrib/gcclibs/libcpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud