opnsense-src/lib/libc/stdlib
Alex Richardson 8dc9d6a7b0 libc/qsort: Don't allow interposing recursive calls
This causes problems when using ASAN with a runtime older than 12.0 since
the intercept does not expect qsort() to call itself using an interposable
function call. This results in infinite recursion and stack exhaustion
when a binary compiled with -fsanitize=address calls qsort.
See also https://bugs.llvm.org/show_bug.cgi?id=46832 and
https://reviews.llvm.org/D84509 (ASAN runtime patch).

To prevent this problem, this patch uses a static helper function
for the actual qsort() implementation. This prevents interposition and
allows for direct calls. As a nice side-effect, we can also move the
qsort_s checks to the top-level function and out of the recursive calls.

Reviewed By:	kib
Differential Revision: https://reviews.freebsd.org/D28133

(cherry picked from commit cbcfe28f9d)
2021-03-17 09:46:58 +00:00
..
jemalloc Follow-up r365371 by removing sentences which indicate the state of the 2020-09-06 09:08:06 +00:00
_Exit.c
a64l.3
a64l.c
abort.3
abort.c
abs.3
abs.c
alloca.3
at_quick_exit.3
atexit.3
atexit.c
atexit.h
atof.3
atof.c
atoi.3
atoi.c
atol.3
atol.c
atoll.c
bsearch.3
bsearch.c libc: typo fix (s/involes/involves) 2020-10-16 17:51:09 +00:00
bsearch_b.c
cxa_thread_atexit.c
cxa_thread_atexit_impl.c
div.3
div.c
exit.3
exit.c
getenv.3
getenv.c
getopt.3
getopt.c getopt: Fix conversion from string-literal to non-const char * 2021-01-19 21:23:25 +00:00
getopt_long.3 Fix a typo: argments -> arguments 2020-05-19 11:05:27 +00:00
getopt_long.c getopt: Fix conversion from string-literal to non-const char * 2021-01-19 21:23:25 +00:00
getsubopt.3
getsubopt.c
hcreate.3
hcreate.c
hcreate_r.c
hdestroy_r.c
heapsort.c
heapsort_b.c
hsearch.h
hsearch_r.c
imaxabs.3
imaxabs.c
imaxdiv.3
imaxdiv.c
insque.3
insque.c
l64a.c
labs.3
labs.c
ldiv.3
ldiv.c
llabs.3
llabs.c
lldiv.3
lldiv.c
lsearch.3
lsearch.c
Makefile.inc Implement ptsname_r. 2020-10-17 04:14:38 +00:00
memory.3
merge.c libc: Fix null pointer arithmetic warning in mergesort 2021-01-20 09:56:01 +00:00
mergesort_b.c
ptsname.3 Implement ptsname_r. 2020-10-17 04:14:38 +00:00
ptsname.c Further refinements of ptsname_r(3) interface: 2020-10-20 01:29:45 +00:00
qsort.3
qsort.c libc/qsort: Don't allow interposing recursive calls 2021-03-17 09:46:58 +00:00
qsort_r.c
qsort_s.c
quick_exit.3
quick_exit.c
radixsort.3
radixsort.c
rand.3
rand.c
random.3
random.c
random.h
reallocarray.3
reallocarray.c
reallocf.3
reallocf.c
realpath.3
realpath.c
remque.c
set_constraint_handler_s.3
set_constraint_handler_s.c
strfmon.3
strfmon.c Compute the correct size of the string to move forward. 2020-09-02 20:04:26 +00:00
strtod.3
strtoimax.c
strtol.3
strtol.c
strtold.c
strtoll.c
strtonum.3
strtonum.c
strtoq.c
strtoul.3
strtoul.c
strtoull.c
strtoumax.c
strtouq.c
Symbol.map Further refinements of ptsname_r(3) interface: 2020-10-20 01:29:45 +00:00
system.3 libc: Fix most issues reported by mandoc 2020-12-19 14:54:28 +00:00
system.c
tdelete.c
tfind.c
tsearch.3
tsearch.c
tsearch_path.h
twalk.c