opnsense-src/lib/libc
Justin Hibbits 0f3a4adcb2 Fix PowerPC64 ELFv1-specific problem in __elf_phdr_match_addr() leading to crash
in threaded programs that unload libraries.

Summary:
The GNOME update to 3.28 exposed a bug in __elf_phdr_match_addr(), which leads
to a crash when building devel/libsoup on powerpc64.

Due to __elf_phdr_match_addr() limiting its search to PF_X sections, on the
PPC64 ELFv1 ABI, it was never matching function pointers properly.

This meant that libthr was never cleaning up its atfork list in
__pthread_cxa_finalize(), so if a library with an atfork handler was unloaded,
libthr would crash on the next fork.

Normally, the null pointer check it does before calling the handler would avoid
this crash, but, due to PPC64 ELFv1 using function descriptors instead of raw
function pointers, a null check against the pointer itself is insufficient, as
the pointer itself was not null, it was just pointing at a function descriptor
that had been zeroed. (Which is an ABI violation.)

Calling a zeroed function descriptor on PPC64 ELFv1 causes a jump to address 0
with a zeroed r2 and r11.

Submitted by:	git_bdragon.rtk0.net
Reviewed By:	kib
MFC after:	1 week
Differential Revision: https://reviews.freebsd.org/D18364
2018-12-01 20:39:20 +00:00
..
aarch64 Don't export _end on arm64 and riscv. 2018-06-01 23:42:10 +00:00
amd64 amd64: align target memmove buffer to 16 bytes before using rep movs 2018-12-01 14:20:32 +00:00
arm Revert r336773: it removed too much. 2018-07-27 21:25:01 +00:00
capability Replace dot-dot relative pathing with SRCTOP-relative paths where possible 2017-01-20 03:23:24 +00:00
compat-43 General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
db Remove "All rights reserved" from my files. 2018-05-10 06:41:08 +00:00
gdtoa libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +00:00
gen Fix PowerPC64 ELFv1-specific problem in __elf_phdr_match_addr() leading to crash 2018-12-01 20:39:20 +00:00
gmon mcount: tidy up ANSIfication 2018-10-20 22:39:35 +00:00
i386 amd64: depessimize userspace memcpy/memmove/bcopy 2018-09-17 15:49:35 +00:00
iconv libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +00:00
include Update userland arc4random() with OpenBSD's Chacha20 based arc4random(). 2018-08-19 17:40:50 +00:00
inet libc: fix cases of undefined behavior. 2018-08-07 15:24:19 +00:00
isc SPDX: more ISC-related files. 2017-12-08 17:52:53 +00:00
locale Fix WITHOUT_ICONV build after r340276. 2018-11-14 09:06:15 +00:00
md Replace dot-dot relative pathing with SRCTOP-relative paths where possible 2017-01-20 03:23:24 +00:00
mips Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
nameser SPDX: license IDs for some ISC-related files. 2017-12-08 15:57:29 +00:00
net Style cleanup. 2018-11-27 09:41:47 +00:00
nls Use current locale (f.e. set by thread). It was global locale always 2016-08-24 16:44:27 +00:00
posix1e Move mac.conf to lib/libc/posix1e/ 2018-09-18 01:40:37 +00:00
powerpc Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
powerpc64 Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
powerpcspe Fix fabs(3) for powerpcspe, this time for real 2018-07-26 14:42:20 +00:00
quad ANSIfy libc/quad 2018-10-21 00:20:40 +00:00
regex regexec: fix processing multibyte strings. 2018-11-23 15:49:18 +00:00
resolv Allow the use of TCP instead of UDP for queries by setting options usevc 2018-08-16 13:18:40 +00:00
riscv Fix setjmp for RISC-V: 2018-07-23 09:54:28 +00:00
rpc Fix CONFS to append the value in this case. 2018-09-18 01:38:44 +00:00
secure Carefully update stack guard bytes inside __guard_setup(). 2018-04-24 15:59:39 +00:00
softfloat Add implementations for clog(3), clogf(3), and clog(3). 2018-05-13 09:54:34 +00:00
sparc64 Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
stdio Follow up on r331936. gets_s(3) will also fail in the same way that 2018-10-23 14:16:02 +00:00
stdlib Provide set_constraint_handler_s(3) man page. 2018-08-19 14:39:57 +00:00
stdtime strptime: make %k and %l specifiers match their description in 2018-11-03 23:37:13 +00:00
string Avoid OOB reads in memmem(3). 2018-10-15 20:20:57 +00:00
sys fcntl.2: document an additional error condition 2018-11-15 16:13:25 +00:00
tests regexec: fix processing multibyte strings. 2018-11-23 15:49:18 +00:00
uuid libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +00:00
x86/sys Fix a regression in r321608. 2017-08-13 14:42:23 +00:00
xdr General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
yp libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +00:00
libc.ldscript Attempt to move the POSIX iconv* symbols out of runtime linker space. 2013-11-17 22:52:17 +00:00
libc_nossp.ldscript Add different libc ldscript: the one without libssp -- 2016-10-12 13:19:21 +00:00
Makefile revert r340640 "libc: forcibly disable BIND_NOW" 2018-11-26 13:56:19 +00:00
Makefile.depend DIRDEPS_BUILD: Regenerate without local dependencies. 2016-02-24 17:20:11 +00:00
Versions.def Create namespace for the symbols added during 13-CURRENT cycle. 2018-11-12 19:12:14 +00:00