libthr: work around an ASAN false-positive
authorAlex Richardson <arichardson@FreeBSD.org>
Mon, 2 Aug 2021 08:49:21 +0000 (09:49 +0100)
committerAlex Richardson <arichardson@FreeBSD.org>
Mon, 2 Aug 2021 13:33:24 +0000 (14:33 +0100)
commit9efbe526e00f47d946b3320f595e73fea26805df
tree75f5486f7e819ca0aa512b89eb99c2e9aac26924
parent7bc797e3f3807660cf98e5b1bd63545cafe820f8
libthr: work around an ASAN false-positive

I got the following error with an ASAN-instrument libthr:

==803==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fffffffcdb0 at pc 0x000801863396 bp 0x7ff8
READ of size 4 at 0x7fffffffcdb0 thread T0
    #0 0x801863395 in handle_signal /local/scratch/alr48/cheri/freebsd/lib/libthr/thread/thr_sig.c:262:2
    #1 0x801860da2 in thr_sighandler /local/scratch/alr48/cheri/freebsd/lib/libthr/thread/thr_sig.c:246:2

Address 0x7fffffffcdb0 is located in stack of thread T0 at offset 208 in frame
    #0 0x80186080f in thr_sighandler /local/scratch/alr48/cheri/freebsd/lib/libthr/thread/thr_sig.c:213

  This frame has 1 object(s):
    [32, 64) 'act' (line 216) <== Memory access at offset 208 overflows this variable
HINT: this may be a false positive if your program uses some custom stack

This seems like a false-positive since the line in question is
`SIGSETOR(actp->sa_mask, ucp->uc_sigmask);` and it complains about a read
operation (from the ucontext_t argument) so this indicates to me that ASAN
does not understand that thr_sighandler() is a signal handler.

Differential Revision: https://reviews.freebsd.org/D31074
lib/libthr/Makefile