Author: dab
Date: Tue Nov 19 14:46:28 2019
New Revision: 354854
URL: https://svnweb.freebsd.org/changeset/base/354854

Log:
  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.br...@isilon.com>
  Reviewed by:  kib, rang_acm.org
  Sponsored by: Dell EMC Isilon
  Differential Revision:        https://reviews.freebsd.org/D22239

Modified:
  head/sys/sys/cdefs.h
  head/sys/sys/linker_set.h

Modified: head/sys/sys/cdefs.h
==============================================================================
--- head/sys/sys/cdefs.h        Tue Nov 19 13:28:59 2019        (r354853)
+++ head/sys/sys/cdefs.h        Tue Nov 19 14:46:28 2019        (r354854)
@@ -872,6 +872,13 @@
 /* Function should not be analyzed. */
 #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. */
 #define        __guarded_by(x)         __lock_annotate(guarded_by(x))
 #define        __pt_guarded_by(x)      __lock_annotate(pt_guarded_by(x))

Modified: head/sys/sys/linker_set.h
==============================================================================
--- head/sys/sys/linker_set.h   Tue Nov 19 13:28:59 2019        (r354853)
+++ head/sys/sys/linker_set.h   Tue Nov 19 14:46:28 2019        (r354854)
@@ -61,6 +61,7 @@
        __GLOBL(__CONCAT(__stop_set_,set));             \
        static void const * qv                          \
        __set_##set##_sym_##sym __section("set_" #set)  \
+       __nosanitizeaddress                             \
        __used = &(sym)
 #define __MAKE_SET(set, sym)   __MAKE_SET_QV(set, sym, __MAKE_SET_CONST)
 #else /* !__GNUCLIKE___SECTION */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to