Don't sanitize linker_set

The assumptions of linker_set don't play nicely with
AddressSanitizer. AddressSanitizer adds a 'redzone' of zeros around
globals (including those in named sections), whereas linker_set
assumes they are all packed consecutively like a pointer array. So:
let's annotate linker_set so that AddressSanitizer ignores it.

Submitted by:	Matthew Bryan <matthew.bryan@isilon.com>
Reviewed by:	kib, rang_acm.org
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D22239
This commit is contained in:
dab 2019-11-19 14:46:28 +00:00 committed by Sebastian Huber
parent c25de3a3c5
commit b9967c3f90
1 changed files with 7 additions and 0 deletions

View File

@ -709,6 +709,13 @@
/* Function should not be analyzed. */ /* Function should not be analyzed. */
#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis) #define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
/* Function or variable should not be sanitized, ie. by AddressSanitizer */
#if __has_attribute(no_sanitize)
#define __nosanitizeaddress __attribute__((no_sanitize("address")))
#else
#define __nosanitizeaddress
#endif
/* Guard variables and structure members by lock. */ /* Guard variables and structure members by lock. */
#define __guarded_by(x) __lock_annotate(guarded_by(x)) #define __guarded_by(x) __lock_annotate(guarded_by(x))
#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x)) #define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))