Sfoglia il codice sorgente

Don't enable SEGV/BUS handlers when address sanitizer is active

Bryan Drewery 7 anni fa
parent
commit
91270cc343
3 ha cambiato i file con 8 aggiunte e 0 eliminazioni
  1. 1 0
      build/autotools/configure.ac
  2. 1 0
      configure
  3. 6 0
      src/debug.cc

+ 1 - 0
build/autotools/configure.ac

@@ -50,6 +50,7 @@ fi
 CXX_FLAG_CHECK_LINK([DEBCXXFLAGS], [-fsanitize=address], [fsanitize_address])
 if [[ "${ax_cv_prog_cc_fsanitize_address}" = "yes" ]]; then
   DEBLDFLAGS="${DEBLDFLAGS} -fsanitize=address"
+  DEBCXXFLAGS="${DEBCXXFLAGS} -D__SANITIZE_ADDRESS__"
 fi
 CXX_FLAG_CHECK([DEBCXXFLAGS], [-fstack-protector-all], [stackprotectorall])
 CXX_FLAG_CHECK([DEBCXXFLAGS], [-Wconditional-uninitialized], [w_conditional_uninitialized])

+ 1 - 0
configure

@@ -3878,6 +3878,7 @@ EOF
 
 if [ "${ax_cv_prog_cc_fsanitize_address}" = "yes" ]; then
   DEBLDFLAGS="${DEBLDFLAGS} -fsanitize=address"
+  DEBCXXFLAGS="${DEBCXXFLAGS} -D__SANITIZE_ADDRESS__"
 fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler understands -fstack-protector-all" >&5

+ 6 - 0
src/debug.cc

@@ -184,6 +184,7 @@ static void write_debug(bool fatal = 1)
 static void got_bus(int) __attribute__ ((noreturn));
 #endif /* DEBUG */
 
+#ifndef __SANITIZE_ADDRESS__
 static void got_bus(int z)
 {
   signal(SIGBUS, SIG_DFL);
@@ -195,11 +196,13 @@ static void got_bus(int z)
   exit(1);
 #endif /* DEBUG */
 }
+#endif /* !__SANITIZE_ADDRESS__ */
 
 #ifndef DEBUG
 static void got_segv(int) __attribute__ ((noreturn));
 #endif /* DEBUG */
 
+#ifndef __SANITIZE_ADDRESS__
 static void got_segv(int z)
 {
   signal(SIGSEGV, SIG_DFL);
@@ -211,6 +214,7 @@ static void got_segv(int z)
   exit(1);
 #endif /* DEBUG */
 }
+#endif /* !__SANITIZE_ADDRESS__ */
 
 #ifndef DEBUG
 static void got_fpe(int) __attribute__ ((noreturn));
@@ -295,8 +299,10 @@ got_usr1(int z)
 
 void init_signals() 
 {
+#ifndef __SANITIZE_ADDRESS__
   signal(SIGBUS, got_bus);
   signal(SIGSEGV, got_segv);
+#endif
   signal(SIGFPE, got_fpe);
   signal(SIGTERM, got_term);
   signal(SIGCONT, got_cont);