freebsd-skq/libexec
Konstantin Belousov 5734c46c68 _rtld_bind() read-locks the bind lock, and possible plt resolution
from the dispatcher would also acquire bind lock in read mode, which
is the supported operation. plt is explicitely designed to allow safe
multithreaded updates, so the shared lock do not cause problems.

The error in r228435 is that it allows read lock acquisition after the
write lock for the bind block.  If we dlopened the shared object that
contains IRELATIVE or jump slot which target is STT_GNU_IFUNC, then
possible recursive plt resolve from the dispatcher would cause it.

Postpone the resolution for irelative/ifunc right before initializers
are called, and drop bind lock around calls to dispatcher.  Use
initlist to iterate over the objects instead of the ->next, due to
drop of the bind lock in iteration.

For i386/reloc.c:reloc_iresolve(), fix calculation of the dispatch
function address for dso, by taking into account possible non-zero
relocbase.

MFC after:	3 weeks
2011-12-14 16:47:53 +00:00
..
atrun Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
bootpd Catch up with kernel using time_uptime to drive ARP timeouts. 2010-12-06 09:39:36 +00:00
comsat Make comsat(8) approximately 15% smaller. 2011-12-10 18:35:26 +00:00
fingerd Forgot to initialize the debug variable. 2010-04-01 13:16:32 +00:00
ftpd Add LOGIN_SETCPUMASK and LOGIN_SETLOGINCLASS to the setusercontext(3) 2011-06-22 19:14:49 +00:00
getty Add __unused. Ansi prototypes. 2010-12-20 08:29:54 +00:00
lukemftpd Not needed any more, vendor sources have PAM support. 2006-08-31 17:12:33 +00:00
mail.local Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
mknetid Fix double ;; 2010-12-06 10:24:06 +00:00
pppoed Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
rbootd Add __unused 2010-12-20 08:37:26 +00:00
revnetgroup Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
rlogind Add __unused 2010-12-20 08:44:08 +00:00
rpc.rquotad The NFS quota-reporting RPC uses 32-bit sized fields. We approximate 2010-04-25 00:05:51 +00:00
rpc.rstatd Fixed static linkage. 2010-02-26 09:41:16 +00:00
rpc.rusersd Port all apps in libexec/ from libulog to utmpx. 2010-01-13 18:28:58 +00:00
rpc.rwalld add __unused 2010-12-19 13:05:17 +00:00
rpc.sprayd Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
rshd Fix a misplaced parenthesis. 2011-10-30 12:33:19 +00:00
rtld-aout ANSIfy ldconfig and the aout bits it still uses from rtld-aout. 2009-12-29 21:07:17 +00:00
rtld-elf _rtld_bind() read-locks the bind lock, and possible plt resolution 2011-12-14 16:47:53 +00:00
save-entropy 1. Attempt to take one bullet out of the foot-shooting gun by silently 2006-08-28 06:41:50 +00:00
smrsh Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
talkd Remove unneeded use of struct timezone. 2010-08-08 02:45:48 +00:00
tcpd Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
telnetd Convert telnetd(8) to use posix_openpt(2). 2008-11-13 19:05:27 +00:00
tftp-proxy Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
tftpd Pull in some wording to the tftpd.8 man page 2011-07-31 03:18:36 +00:00
ulog-helper Minor cleanups to ulog-helper: 2011-06-21 17:59:51 +00:00
ypxfr Fix incorrect usage of 'assure' and 'insure'. 2010-08-28 16:32:01 +00:00
Makefile Add a new library: libulog. 2009-12-03 15:48:24 +00:00
Makefile.inc Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00