freebsd-skq/lib/libc
Mark Johnston 9f9c9b22ec Reimplement brk() and sbrk() to avoid the use of _end.
Previously, libc.so would initialize its notion of the break address
using _end, a special symbol emitted by the static linker following
the bss section.  Compatibility issues between lld and ld.bfd could
cause the wrong definition of _end (libc.so's definition rather than
that of the executable) to be used, breaking the brk()/sbrk()
interface.

Avoid this problem and future interoperability issues by simply not
relying on _end.  Instead, modify the break() system call to return
the kernel's view of the current break address, and have libc
initialize its state using an extra syscall upon the first use of the
interface.  As a side effect, this appears to fix brk()/sbrk() usage
in executables run with rtld direct exec, since the kernel and libc.so
no longer maintain separate views of the process' break address.

PR:		228574
Reviewed by:	kib (previous version)
MFC after:	2 months
Differential Revision:	https://reviews.freebsd.org/D15663
2018-06-04 19:35:15 +00:00
..
aarch64 Don't export _end on arm64 and riscv. 2018-06-01 23:42:10 +00:00
amd64 Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
arm Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +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 fts_stat: fix buffer overrun on error path 2018-05-28 02:31:49 +00:00
gmon General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
i386 Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
iconv libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +00:00
include getentropy(3): Fallback to kern.arandom sysctl on older kernels 2018-03-21 23:52:37 +00:00
inet SPDX: license IDs for some ISC-related files. 2017-12-08 15:57:29 +00:00
isc SPDX: more ISC-related files. 2017-12-08 17:52:53 +00:00
locale Don't put multiple names on a single .Nm line. This fixes apropos(1) 2018-04-17 09:05:46 +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 Remove support for the Arcnet protocol. 2018-04-13 21:18:04 +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 libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +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 Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
quad General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
regex Add missing patch from r328240 2018-01-22 02:58:33 +00:00
resolv SPDX: license IDs for some ISC-related files. 2017-12-08 15:57:29 +00:00
riscv Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
rpc des_crypt.3: Fix typo. 2018-03-07 09:31:27 +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 Implement printf(3) family %m format string extension. 2018-05-22 11:05:40 +00:00
stdlib Bump the date on man pages in r334306 2018-05-29 02:41:32 +00:00
stdtime libc: further adoption of SPDX licensing ID tags. 2017-11-25 17:12:48 +00:00
string strsep.3: don't silently ignore errors 2018-05-28 18:29:15 +00:00
sys Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +00:00
tests Reimplement brk() and sbrk() to avoid the use of _end. 2018-06-04 19:35:15 +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_nossp.ldscript Add different libc ldscript: the one without libssp -- 2016-10-12 13:19:21 +00:00
libc.ldscript
Makefile Now that a special no-SSP libc is used for rtld, allow 2018-05-09 10:33:25 +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 12-CURRENT cycle. 2016-08-06 13:28:58 +00:00