opnsense-src/libexec
R. Christian McDonald d39e0bdc6b rtld/arm: fix initial-exec (IE) thread-local storage relocation
net/frr[89] revealed an interesting edge-case on arm when dynamically
linking a shared library that declares more than one static TLS variable
with at least one  using the "initial-exec" TLS model. In the case
of frr[89], this library was libfrr.so which essentially does the
following:

	#include <stdio.h>

	#include "lib.h"

	static __thread int *a
		__attribute__((tls_model("initial-exec")));

	void lib_test()
	{
		static __thread int b = -1;

		printf("&a = %p\n", &a);
		printf(" a = %p\n", a);

		printf("\n");

		printf("&b = %p\n", &b);
		printf(" b = %d\n", b);
	}

Allocates a file scoped `static __thread` pointer with
tls_model("initial-exec") and later a block scoped TLS int. Notice in
the above minimal reproducer, `b == -1`. The relocation process does
the wrong thing and ends up pointing both `a` and `b` at the same place
in memory.

The output of the above in the broken state is:

	&a = 0x4009c018
	 a = 0xffffffff

	&b = 0x4009c018
	 b = -1

With the patch applied, the output becomes:

	&a = 0x4009c01c
	 a = 0x0

	&b = 0x4009c018
	 b = -1

Reviewed by:	kib
Approved by:    kp (mentor)
Sponsored by:	Rubicon Communications, LLC ("Netgate")
Differential Revision:	https://reviews.freebsd.org/D42415/

(cherry picked from commit 98fd69f0090da73d9d0451bd769d7752468284c6)
2024-11-22 10:35:06 -05:00
..
atf Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
atrun Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
blacklistd-helper Track upstream project rename in contrib/blocklistd 2024-01-07 14:31:11 -05:00
bootpd bootpd(8): Fix a typo in a source code comment 2024-01-25 07:45:24 +01:00
comsat Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
dma dma.conf: Fix typo 2024-04-07 12:34:04 -04:00
fingerd Track upstream project rename in contrib/blocklistd 2024-01-07 14:31:11 -05:00
flua flua: Add wrappers for sys/utsname.h 2024-10-10 20:28:20 +00:00
ftpd Remove "All Rights Reserved" from FreeBSD Foundation copyrights 2024-08-06 15:39:53 -04:00
getty Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
hyperv Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
kgdb crashinfo: Print stack traces for all on-CPU threads 2024-02-09 09:55:45 -05:00
mail.local Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
makewhatis.local Remove $FreeBSD$: two-line nroff pattern 2023-08-16 11:55:10 -06:00
mknetid Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
nuageinit nuageinit: tests: Cleanup 2024-10-08 09:04:02 +02:00
phttpget Remove remnants of portsnap(8) 2024-05-09 15:52:53 +09:00
pppoed Remove $FreeBSD$: two-line nroff pattern 2023-08-16 11:55:10 -06:00
rbootd Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
rc ipfilter: Set ipf -T optionlist at boot 2024-11-18 16:26:04 -08:00
revnetgroup Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
rpc.rquotad Remove $FreeBSD$: two-line nroff pattern 2023-08-16 11:55:10 -06:00
rpc.rstatd Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
rpc.rusersd Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
rpc.rwalld Remove $FreeBSD$: two-line nroff pattern 2023-08-16 11:55:10 -06:00
rpc.sprayd Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
rtld-elf rtld/arm: fix initial-exec (IE) thread-local storage relocation 2024-11-22 10:35:06 -05:00
rtld-elf32 Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
save-entropy save-entropy: Add manual page 2024-05-03 17:25:24 -03:00
smrsh Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
talkd Purge more stray embedded $FreeBSD$ strings 2023-10-24 10:10:12 -07:00
tcpd Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
tests Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
tftp-proxy Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
tftpd tftpd: Address flaky tests 2024-11-19 14:15:06 +00:00
ulog-helper Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
ypxfr Remove $FreeBSD$: two-line nroff pattern 2023-08-16 11:55:10 -06:00
Makefile nuageinit: add basic support for cloudinit. 2024-04-11 13:52:52 +02:00
Makefile.inc Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00