mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
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:
parent
5008941522
commit
fe3d8086fb
2 changed files with 8 additions and 0 deletions
|
|
@ -872,6 +872,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))
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@
|
||||||
__GLOBL(__CONCAT(__stop_set_,set)); \
|
__GLOBL(__CONCAT(__stop_set_,set)); \
|
||||||
static void const * qv \
|
static void const * qv \
|
||||||
__set_##set##_sym_##sym __section("set_" #set) \
|
__set_##set##_sym_##sym __section("set_" #set) \
|
||||||
|
__nosanitizeaddress \
|
||||||
__used = &(sym)
|
__used = &(sym)
|
||||||
#define __MAKE_SET(set, sym) __MAKE_SET_QV(set, sym, __MAKE_SET_CONST)
|
#define __MAKE_SET(set, sym) __MAKE_SET_QV(set, sym, __MAKE_SET_CONST)
|
||||||
#else /* !__GNUCLIKE___SECTION */
|
#else /* !__GNUCLIKE___SECTION */
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue