1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-18 11:05:06 +00:00
serenity/Userland/Libraries/LibC
Daniel Bertalan bd6dc5ccec Meta+LibC: Don't allow text relocations in SerenityOS libraries
The `-z,text` linker flag causes the linker to reject shared libraries
and PIE executables that have textrels. Our code mostly did not use
these except in one place in LibC, which is changed in this commit.
This makes GNU ld match LLD's behavior, which has this option enabled by
default.

TEXTRELs pose a security risk, as performing these relocations require
executable pages to be written to by the dynamic linker. This can
significantly weaken W^X hardening mitigations.

Note that after this change, TEXTRELs can still be used in ports, as the
dynamic loader code is not changed. There are also uses of it in the
kernel, removing which are outside the scope of this PR. To allow those,
`-z,notext` is added.
2021-08-18 18:01:22 +02:00
..
arch Meta+LibC: Don't allow text relocations in SerenityOS libraries 2021-08-18 18:01:22 +02:00
arpa Userland: Treat inet_pton returning 0 as an error 2021-05-27 22:56:21 +02:00
bits LibC: Move SIG_* definitions for sigprocmask into bits/sighow.h 2021-08-18 10:33:48 +02:00
net Kernel+LibC: Share definitions for net/{if,if_arp,route}.h 2021-08-14 19:58:11 +02:00
netinet Kernel+LibC: Share definitions for netinet/in.h 2021-08-14 19:58:11 +02:00
sys LibC: Add stubs for several functions in xattr.h 2021-08-14 22:32:00 +01:00
alloca.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
assert.cpp LibC: Simplify assertion failure dbgln() a bit 2021-07-21 17:45:24 +02:00
assert.h LibC: Use C-style void cast in assert() 2021-07-13 19:02:20 +01:00
byteswap.h Everywhere: Use "the SerenityOS developers." in copyright headers 2021-04-29 00:59:26 +02:00
CMakeLists.txt LibC: Add stubs for several functions in xattr.h 2021-08-14 22:32:00 +01:00
crt0.cpp LibC: Use 64-bit stack smash value for 64-bit mode 2021-07-17 01:45:20 +02:00
crt0_shared.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ctype.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ctype.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
cxxabi.cpp LibC: Don't use C++ attribute syntax in C-visible headers 2021-07-03 01:56:31 +04:30
dirent.cpp LibC: Add function fdopendir 2021-08-14 22:32:00 +01:00
dirent.h LibC: Add function fdopendir 2021-08-14 22:32:00 +01:00
dlfcn.cpp LibC+LibELF: Implement dladdr() 2021-06-06 22:16:11 +02:00
elf.h DynamicLoader+LibELF: Move self-relocation code into a separate file 2021-07-27 13:15:16 +02:00
endian.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
errno.h LibC: Don't clear errno on success 2021-05-30 19:37:32 +02:00
errno_numbers.h LibC: Add definition for EDQUOT 2021-05-08 18:11:52 +02:00
fcntl.cpp Kernel+LibC: Share definitions in fcntl.h and sys/types.h 2021-08-14 19:58:11 +02:00
fcntl.h Kernel+LibC: Share definitions in fcntl.h and sys/types.h 2021-08-14 19:58:11 +02:00
fd_set.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
fenv.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
fenv.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
float.h LibC: Don't include fenv.h from float.h 2021-07-08 10:11:00 +02:00
fnmatch.cpp LibC: Add stub for fnmatch and a set of defined values 2021-08-14 22:32:00 +01:00
fnmatch.h LibC: Add stub for fnmatch and a set of defined values 2021-08-14 22:32:00 +01:00
getopt.cpp LibC+Utilities: Add gnu::format attributes 2021-07-08 10:11:00 +02:00
getopt.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
grp.cpp LibC: Add putgrent 2021-07-15 11:16:58 +02:00
grp.h LibC: Fix grp.h includes 2021-07-17 13:00:33 +02:00
iconv.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
inttypes.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
inttypes.h LibC: Don't include AK headers in system headers 2021-07-15 23:51:59 +02:00
ioctl.cpp LibC: Don't truncate arguments for ioctl() on x86_64 2021-07-22 04:18:39 +04:30
libcinit.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
libgen.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
libgen.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
limits.h Userland: Move HOST_NAME_MAX to limits.h 2021-04-27 23:06:16 +02:00
link.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
link.h Userland: Prefer using ARCH() over __LP64__ 2021-07-13 23:19:33 +02:00
locale.cpp LibC: Let setlocale() pretend that setting the locale succeeded 2021-06-05 10:56:37 +02:00
locale.h LibC: Add definition for LC_MESSAGES 2021-05-08 19:14:21 +02:00
malloc.cpp LibC: Don't flatten malloc and free 2021-08-14 18:42:14 +02:00
mallocdefs.h LibC: Increase minimum alignment for malloc() to 16 bytes 2021-07-13 17:31:22 +02:00
memory.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
mntent.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
mntent.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
net.cpp LibC: Add definitions/stubs for IPv6 functionality 2021-05-09 21:16:11 +02:00
netdb.cpp LibC: Replace fprintf(stderr) with warnln() 2021-05-31 17:43:54 +01:00
netdb.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
paths.h Everywhere: Use "the SerenityOS developers." in copyright headers 2021-04-29 00:59:26 +02:00
poll.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
poll.h Kernel+LibC: Share definitions for poll.h 2021-08-14 19:58:11 +02:00
pthread_forward.cpp LibC+AK: Remove our custom macros from <assert.h> 2021-06-08 17:29:57 +02:00
pthread_integration.cpp LibC: Only set owner on recursive mutexes 2021-07-06 17:25:34 +02:00
pthread_tls.cpp Toolchain+Userland: Enable TLS for x86_64 2021-07-04 01:07:28 +02:00
pty.cpp LibC: openpty error handling update 2021-05-30 08:41:17 +02:00
pty.h LibC: Remove 'int* aslave' parameter from forkpty() 2021-05-06 13:52:46 +01:00
pwd.cpp LibC: Do not include errno.h inside unistd.h 2021-05-14 22:24:02 +02:00
pwd.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
qsort.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
regex.cpp LibC: Add stub forwarders to LibRegex C API 2021-08-12 18:56:30 +02:00
regex.h LibRegex+LibUnicode: Begin implementing Unicode property escapes 2021-07-30 21:26:31 +01:00
resolv.cpp LibC: Add stub for res_query 2021-08-14 22:32:00 +01:00
resolv.h LibC: Add stub for res_query 2021-08-14 22:32:00 +01:00
scanf.cpp LibC: Make scanf always copy its va_list 2021-07-17 00:43:34 +02:00
sched.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
sched.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
serenity.cpp Kernel: Make sys$perf_register_string() generate the string ID's 2021-08-12 00:03:39 +02:00
serenity.h Kernel+Userland: Remove global futexes 2021-08-17 01:21:47 +02:00
setjmp.h LibC: Fix sigsetjmp and siglongjmp 2021-08-18 10:33:48 +02:00
shadow.cpp LibC: Allow empty spwd members when writing shadow entries via putspent 2021-05-30 17:42:03 +01:00
shadow.h LibCore: Fix building the library on macOS 2021-05-01 15:56:16 +02:00
signal.cpp LibC: Fix sigsetjmp and siglongjmp 2021-08-18 10:33:48 +02:00
signal.h LibC: Expose sig_sysname array 2021-08-18 10:33:48 +02:00
signal_numbers.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
spawn.cpp LibC: Do not include errno.h inside unistd.h 2021-05-14 22:24:02 +02:00
spawn.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ssp.cpp LibC: Use 64-bit stack smash value for 64-bit mode 2021-07-17 01:45:20 +02:00
stat.cpp Kernel+LibC: Add fstatat 2021-05-14 23:32:10 +02:00
stdarg.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
stddef.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
stdint.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
stdio.cpp Everywhere: Fix some alignment issues 2021-07-03 01:56:31 +04:30
stdio.h Kernel+LibC: Share definitions for stdio.h 2021-08-14 19:58:11 +02:00
stdio_ext.h LibC: Implement __fpurge 2021-05-30 14:56:50 +01:00
stdlib.cpp Userland: Use kmalloc_array() where appropriate 2021-08-08 00:03:45 +02:00
stdlib.h LibC: Implement mblen() 2021-06-04 10:39:41 +02:00
string.cpp LibC: Implement memcpy and memset for x86_64 2021-06-28 22:29:28 +02:00
string.h LibC: Implement strerror_r() 2021-05-25 17:36:02 +02:00
strings.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
strings.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
stubs.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
sysexits.h LibC: Use EX_IOERR instead of EX_IOER 2021-06-10 20:21:08 +01:00
syslog.cpp LibC: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
syslog.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
termcap.cpp LibC: Make tgetnum() return -1 if capability is not available 2021-06-09 19:41:23 +01:00
termcap.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
termios.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
termios.h Kernel+LibC: Share definitions for termios.h 2021-08-14 19:58:11 +02:00
time.cpp LibC: Don't delete null check in gettimeofday 2021-08-12 21:10:44 +02:00
time.h Kernel+LibC: Share definitions for time.h and sys/stat.h 2021-08-14 19:58:11 +02:00
times.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ulimit.cpp LibC: Add stubs for getrlimit()/setrlimit() 2021-05-08 19:14:21 +02:00
ulimit.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
unistd.cpp Kernel+Userland: Remove chroot functionality 2021-08-15 12:44:35 +02:00
unistd.h Kernel+Userland: Remove chroot functionality 2021-08-15 12:44:35 +02:00
utime.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
utime.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
utmp.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
utsname.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
wchar.cpp LibC: Stub out btowc 2021-05-30 14:56:50 +01:00
wchar.h LibC: Add stubs for wctype and iswctype 2021-05-30 14:56:50 +01:00
wctype.cpp LibC: Don't include C++ headers in C system headers 2021-07-27 16:53:16 +02:00
wctype.h LibC: Don't include C++ headers in C system headers 2021-07-27 16:53:16 +02:00