From: Russ Combs (rucombs) Date: Mon, 17 Oct 2016 14:29:06 +0000 (-0400) Subject: Merge pull request #677 in SNORT/snort3 from tsan to master X-Git-Tag: 3.0.0-233~218 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b2c1b572e4764be425bdf9d80c85c49179ac094f;p=thirdparty%2Fsnort3.git Merge pull request #677 in SNORT/snort3 from tsan to master Squashed commit of the following: commit 41f296afebaf7a455a4affeae8459820aeb868aa Author: Russ Combs Date: Sun Oct 16 19:08:16 2016 -0400 fix -Wmaybe-uninitialized issues commit 83ad8eb66ddee47247452fb0c00cb9ab03dda8bd Author: Russ Combs Date: Fri Oct 14 06:08:51 2016 -0400 add build configuration for thread sanitizer --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d89d412c..3b088f830 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,9 @@ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}") # FIXIT - there is probably a better way to do this set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") +set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SPECIAL_FLAGS}" ) +set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SPECIAL_FLAGS}" ) + include_directories (${PROJECT_BINARY_DIR}) include_directories (${PROJECT_SOURCE_DIR}) diff --git a/cmake/configure_options.cmake b/cmake/configure_options.cmake index d11657638..a78009690 100644 --- a/cmake/configure_options.cmake +++ b/cmake/configure_options.cmake @@ -113,10 +113,13 @@ if ( ENABLE_PROFILE AND CMAKE_COMPILER_IS_GNUCXX ) endif ( ENABLE_PROFILE AND CMAKE_COMPILER_IS_GNUCXX ) if ( ENABLE_ADDRESS_SANITIZER ) - set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer" ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer" ) + set ( SPECIAL_FLAGS "-fsanitize=address -fno-omit-frame-pointer" ) endif ( ENABLE_ADDRESS_SANITIZER ) +if ( ENABLE_THREAD_SANITIZER ) + set ( SPECIAL_FLAGS "-fsanitize=thread -fno-omit-frame-pointer" ) +endif ( ENABLE_THREAD_SANITIZER ) + if ( ENABLE_CODE_COVERAGE ) set ( CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -DNDEBUG" ) set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage" ) diff --git a/cmake/create_options.cmake b/cmake/create_options.cmake index a7438f462..a6a9d0bf3 100644 --- a/cmake/create_options.cmake +++ b/cmake/create_options.cmake @@ -40,6 +40,7 @@ option ( ENABLE_DEBUG "Enable debugging options (bugreports and developers only) option ( ENABLE_GDB "Enable gdb debugging information" OFF ) option ( ENABLE_PROFILE "Enable profiling options (developers only)" OFF ) option ( ENABLE_ADDRESS_SANITIZER "enable address sanitizer support" OFF ) +option ( ENABLE_THREAD_SANITIZER "enable thread sanitizer support" OFF ) option ( ENABLE_CODE_COVERAGE "Whether to enable code coverage support" OFF ) # signals diff --git a/configure.ac b/configure.ac index 6d74b5b61..96a63d540 100644 --- a/configure.ac +++ b/configure.ac @@ -420,11 +420,17 @@ if test "x$enable_corefiles" = "xno"; then fi AC_ARG_ENABLE(address-sanitizer, - AS_HELP_STRING([--enable-address-sanitizer],[enable AddressSanitizer support]), + AS_HELP_STRING([--enable-address-sanitizer],[enable address sanitizer support]), [ ASAN_CCXFLAGS="-fsanitize=address -fno-omit-frame-pointer" ]) +AC_ARG_ENABLE(thread-sanitizer, + AS_HELP_STRING([--enable-thread-sanitizer],[enable thread sanitizer support]), + [ + ASAN_CCXFLAGS="-fsanitize=thread -fno-omit-frame-pointer" + ]) + #-------------------------------------------------------------------------- # compile-time security features #-------------------------------------------------------------------------- diff --git a/configure_cmake.sh b/configure_cmake.sh index bf47415bd..5a8130a81 100755 --- a/configure_cmake.sh +++ b/configure_cmake.sh @@ -50,6 +50,8 @@ Optional Features: --disable-corefiles prevent Snort from generating core files --enable-address-sanitizer enable address sanitizer support + --enable-thread-sanitizer + enable thread sanitizer support --enable-unit-tests build unit tests --enable-piglet build piglet test harness --disable-static-daq link static DAQ modules @@ -260,6 +262,12 @@ while [ $# -ne 0 ]; do --disable-address-sanitizer) append_cache_entry ENABLE_ADDRESS_SANITIZER BOOL false ;; + --enable-thread-sanitizer) + append_cache_entry ENABLE_THREAD_SANITIZER BOOL true + ;; + --disable-thread-sanitizer) + append_cache_entry ENABLE_THREAD_SANITIZER BOOL false + ;; --enable-unit-tests) append_cache_entry ENABLE_UNIT_TESTS BOOL true ;; diff --git a/src/decompress/file_decomp.cc b/src/decompress/file_decomp.cc index 036cbc96a..fdd2f7245 100644 --- a/src/decompress/file_decomp.cc +++ b/src/decompress/file_decomp.cc @@ -479,9 +479,9 @@ TEST_CASE("File_Decomp_SetBuf-null", "[file_decomp]") TEST_CASE("File_Decomp_SetBuf-Decompr_Depth-error", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->Total_Out = 20; p_s->Decompr_Depth = 10; REQUIRE(File_Decomp_SetBuf(p_s) == File_Decomp_Error); @@ -490,9 +490,9 @@ TEST_CASE("File_Decomp_SetBuf-Decompr_Depth-error", "[file_decomp]") TEST_CASE("File_Decomp_SetBuf-Compr_Depth-error", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->Total_In = 20; p_s->Compr_Depth = 10; REQUIRE(File_Decomp_SetBuf(p_s) == File_Decomp_Error); @@ -501,9 +501,9 @@ TEST_CASE("File_Decomp_SetBuf-Compr_Depth-error", "[file_decomp]") TEST_CASE("File_Decomp_New", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); REQUIRE(p_s->State == STATE_NEW); REQUIRE(p_s->Sig_State == 0); REQUIRE(p_s->Total_In == 0); @@ -522,18 +522,18 @@ TEST_CASE("File_Decomp-null", "[file_decomp]") TEST_CASE("File_Decomp-not_active", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); REQUIRE(File_Decomp(p_s) == File_Decomp_Error); File_Decomp_Free(p_s); } TEST_CASE("File_Decomp-complete_state", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->State = STATE_COMPLETE; REQUIRE(File_Decomp(p_s) == File_Decomp_Error); File_Decomp_Free(p_s); @@ -541,20 +541,20 @@ TEST_CASE("File_Decomp-complete_state", "[file_decomp]") TEST_CASE("Initialize_Decompression-not_active", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); REQUIRE(Initialize_Decompression(p_s) == File_Decomp_Error); File_Decomp_Free(p_s); } TEST_CASE("Process_Decompression-not_active", "[file_decomp]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); REQUIRE(Process_Decompression(p_s) == File_Decomp_Error); File_Decomp_Free(p_s); } - #endif + diff --git a/src/decompress/file_decomp_pdf.cc b/src/decompress/file_decomp_pdf.cc index d5295fba7..db9fbbad1 100644 --- a/src/decompress/file_decomp_pdf.cc +++ b/src/decompress/file_decomp_pdf.cc @@ -1173,9 +1173,9 @@ TEST_CASE("File_Decomp_End_PDF-null", "[file_decomp_pdf]") TEST_CASE("File_Decomp_PDF-not_pdf-error", "[file_decomp_pdf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->PDF = (fd_PDF_t*)snort_calloc(sizeof(fd_PDF_t)); p_s->File_Type = FILE_TYPE_SWF; REQUIRE(File_Decomp_PDF(p_s) == File_Decomp_Error); @@ -1185,9 +1185,9 @@ TEST_CASE("File_Decomp_PDF-not_pdf-error", "[file_decomp_pdf]") TEST_CASE("File_Decomp_PDF-bad_state-error", "[file_decomp_pdf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->PDF = (fd_PDF_t*)snort_calloc(sizeof(fd_PDF_t)); p_s->File_Type = FILE_TYPE_PDF; p_s->PDF->State = PDF_STATE_NEW; @@ -1197,9 +1197,9 @@ TEST_CASE("File_Decomp_PDF-bad_state-error", "[file_decomp_pdf]") TEST_CASE("File_Decomp_End_PDF-bad_type-error", "[file_decomp_pdf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->PDF = (fd_PDF_t*)snort_calloc(sizeof(fd_PDF_t)); p_s->File_Type = FILE_TYPE_PDF; p_s->PDF->Decomp_Type = FILE_COMPRESSION_TYPE_LZMA; @@ -1207,5 +1207,5 @@ TEST_CASE("File_Decomp_End_PDF-bad_type-error", "[file_decomp_pdf]") REQUIRE(File_Decomp_End_PDF(p_s) == File_Decomp_Error); File_Decomp_Free(p_s); } - #endif + diff --git a/src/decompress/file_decomp_swf.cc b/src/decompress/file_decomp_swf.cc index 6b534b8f0..3ff04c55f 100644 --- a/src/decompress/file_decomp_swf.cc +++ b/src/decompress/file_decomp_swf.cc @@ -363,9 +363,9 @@ TEST_CASE("File_Decomp_End_SWF-null", "[file_decomp_swf]") TEST_CASE("File_Decomp_SWF-not_swf-error", "[file_decomp_swf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->SWF = (fd_SWF_t*)snort_calloc(sizeof(fd_SWF_t)); p_s->File_Type = FILE_TYPE_PDF; REQUIRE(File_Decomp_SWF(p_s) == File_Decomp_Error); @@ -375,9 +375,9 @@ TEST_CASE("File_Decomp_SWF-not_swf-error", "[file_decomp_swf]") TEST_CASE("File_Decomp_SWF-bad_state-error", "[file_decomp_swf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->SWF = (fd_SWF_t*)snort_calloc(sizeof(fd_SWF_t)); p_s->File_Type = FILE_TYPE_SWF; p_s->SWF->State = SWF_STATE_NEW; @@ -387,9 +387,9 @@ TEST_CASE("File_Decomp_SWF-bad_state-error", "[file_decomp_swf]") TEST_CASE("File_Decomp_Init_SWF-bad_type-error", "[file_decomp_swf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->File_Type = FILE_TYPE_SWF; p_s->Decomp_Type = FILE_COMPRESSION_TYPE_DEFLATE; REQUIRE(File_Decomp_Init_SWF(p_s) == File_Decomp_Error); @@ -398,15 +398,14 @@ TEST_CASE("File_Decomp_Init_SWF-bad_type-error", "[file_decomp_swf]") TEST_CASE("File_Decomp_End_SWF-bad_type-error", "[file_decomp_swf]") { - fd_session_p_t p_s; + fd_session_p_t p_s = File_Decomp_New(); - REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL); + REQUIRE(p_s != nullptr); p_s->SWF = (fd_SWF_t*)snort_calloc(sizeof(fd_SWF_t)); p_s->Decomp_Type = FILE_COMPRESSION_TYPE_DEFLATE; REQUIRE(File_Decomp_End_SWF(p_s) == File_Decomp_Error); p_s->File_Type = FILE_TYPE_SWF; File_Decomp_Free(p_s); } - - #endif +