1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-11 14:10:34 +00:00
freebsd/lib/libthr/thread
Konstantin Belousov 0a9655a082 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
2013-11-23 15:48:17 +00:00
..
Makefile.inc Introduce a non-portable function pthread_getthreadid_np(3) to retrieve 2011-02-07 21:26:46 +00:00
thr_affinity.c Don't compare thread pointers again. 2010-09-13 11:58:42 +00:00
thr_attr.c Use sysctl kern.sched.cpusetsize to retrieve size of kernel cpuset. 2010-11-02 02:13:13 +00:00
thr_autoinit.c
thr_barrier.c When destroying a barrier, waiting all threads exit the barrier, 2012-03-16 04:35:52 +00:00
thr_barrierattr.c
thr_cancel.c The SUSv4tc1 requires that pthread_setcancelstate() shall be not a 2013-06-19 04:47:41 +00:00
thr_clean.c Only access unwind_disabled when _PTHREAD_FORCED_UNWIND is defined. 2010-09-25 09:43:24 +00:00
thr_concurrency.c
thr_cond.c Do defered mutex wakeup once. 2012-08-12 00:56:56 +00:00
thr_condattr.c Coalesce one more broken line. 2010-05-24 13:44:39 +00:00
thr_create.c Implement the __pthread_map_stacks_exec() for libthr. 2011-01-09 12:38:40 +00:00
thr_detach.c Convert thread list lock from mutex to rwlock. 2010-09-13 07:03:01 +00:00
thr_equal.c
thr_event.c
thr_exit.c change code to use unwind.h. 2010-09-30 12:59:56 +00:00
thr_fork.c Eliminate redundant code, _thr_spinlock_init() has already been called 2012-08-23 05:15:15 +00:00
thr_getcpuclockid.c Implement syscall clock_getcpuclockid2, so we can get a clock id 2012-08-17 02:26:31 +00:00
thr_getprio.c
thr_getschedparam.c Don't forget to initialize return value. 2012-07-20 05:47:12 +00:00
thr_getthreadid_np.c Introduce a non-portable function pthread_getthreadid_np(3) to retrieve 2011-02-07 21:26:46 +00:00
thr_info.c Simplify code by replacing _thr_ref_add() with _thr_find_thread(). 2012-07-20 03:37:19 +00:00
thr_init.c libthr: Always use the threaded rtld lock implementation. 2013-01-18 23:08:40 +00:00
thr_join.c Fix typo. 2010-09-19 08:55:36 +00:00
thr_kern.c libthr: Always use the threaded rtld lock implementation. 2013-01-18 23:08:40 +00:00
thr_kill.c Convert thread list lock from mutex to rwlock. 2010-09-13 07:03:01 +00:00
thr_list.c Make code more stable by checking NULL pointers. 2012-02-11 04:12:12 +00:00
thr_main_np.c
thr_multi_np.c
thr_mutex.c MFp4: 2012-08-11 23:17:02 +00:00
thr_mutexattr.c
thr_once.c r179417 introduced a bug into pthread_once(). Previously pthread_once() 2011-04-20 14:19:34 +00:00
thr_printf.c
thr_private.h If check_deferred_signal() execution needs binding of PLT symbol, 2013-11-23 15:48:17 +00:00
thr_pspinlock.c
thr_resume_np.c In suspend_common(), don't wait for a thread which is in creation, because 2012-08-27 03:09:39 +00:00
thr_rtld.c libthr: Remove _thr_rtld_fini(), unused since r245630. 2013-04-12 19:47:32 +00:00
thr_rwlock.c Follow changes made in revision 232144, pass absolute timeout to kernel, 2012-02-27 13:38:52 +00:00
thr_rwlockattr.c Revert revision 214007, I realized that MySQL wants to resolve 2010-10-20 02:34:02 +00:00
thr_self.c
thr_sem.c Use umtx to implement process sharable semaphore, to make this work, 2010-01-05 02:37:59 +00:00
thr_setprio.c Don't assign same value. 2012-07-20 03:22:17 +00:00
thr_setschedparam.c Don't assign same value. 2012-07-20 03:22:17 +00:00
thr_sig.c If check_deferred_signal() execution needs binding of PLT symbol, 2013-11-23 15:48:17 +00:00
thr_single_np.c
thr_sleepq.c Create a common function lookup() to search a chan, this eliminates 2012-05-10 09:30:37 +00:00
thr_spec.c Return one-based key so that user can check if the key is ever allocated 2013-05-16 03:01:04 +00:00
thr_spinlock.c
thr_stack.c For the process that already loaded libthr but still not initialized 2011-01-10 16:10:25 +00:00
thr_suspend_np.c In suspend_common(), don't wait for a thread which is in creation, because 2012-08-27 03:09:39 +00:00
thr_switch_np.c
thr_symbols.c
thr_syscalls.c Add accept4() system call. 2013-05-01 20:10:21 +00:00
thr_umtx.c Use clockid parameter instead of hard-coded CLOCK_REALTIME. 2012-03-19 00:07:10 +00:00
thr_umtx.h libthr: Fix a parameter name in an internal header file. 2013-04-27 14:21:36 +00:00
thr_yield.c