From 86a07e2a80938d9cd3300853ac6c1bf1ee175e66 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 22 Sep 2019 15:32:03 +0100 Subject: [PATCH] Enable more sanitisers --- .travis.yml | 15 ++++++++++++++- CMakeLists.txt | 8 ++++---- Makefile | 8 ++++---- llarp/config/config.cpp | 6 +++--- llarp/iwp/linklayer.cpp | 1 + 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index d3a674fff..ff4ccdb96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -59,7 +59,20 @@ matrix: - name: "address sanitizer" os: osx osx_image: xcode10.2 - env: BUILD_TYPE=Debug ASAN=ON PATH="/usr/local/opt/ccache/libexec:$PATH" CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/llvm/bin/clang++ + env: BUILD_TYPE=Debug XSAN=address PATH="/usr/local/opt/ccache/libexec:$PATH" CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/llvm/bin/clang++ + - name: "thread sanitizer" + os: osx + osx_image: xcode10.2 + env: BUILD_TYPE=Debug XSAN=thread PATH="/usr/local/opt/ccache/libexec:$PATH" CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/llvm/bin/clang++ + - name: "undefined sanitizer" + os: osx + osx_image: xcode10.2 + env: BUILD_TYPE=Debug XSAN=undefined PATH="/usr/local/opt/ccache/libexec:$PATH" CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/llvm/bin/clang++ + - name: "memory sanitizer" + os: linux + dist: xenial + compiler: clang + env: BUILD_TYPE=Debug XSAN=memory - name: "native windows debug" os: windows env: BUILD_TYPE=Debug diff --git a/CMakeLists.txt b/CMakeLists.txt index 6699fb432..2351ea436 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ option(STATIC_LINK_RUNTIME "link statically against compiler runtime, standard l endif() option(NON_PC_TARGET "non-pc target build: iphone, andriod, embedded non-i386 SBC, etc" ) option(SHADOW "use shadow testing framework. linux only" ) -option(ASAN "use address sanitiser, if your system has it" ) +option(XSAN "use sanitiser, if your system has it" ) option(JEMALLOC "use jemalloc. Not required on BSD" ) option(DEBIAN "build for debian" ) option(TESTNET "testnet build" ) @@ -91,10 +91,10 @@ if(NOT DEBIAN AND NOT MSVC_VERSION) set(DEBUG_FLAGS -O0 -g3) endif() -if(ASAN) - set(DEBUG_FLAGS ${DEBUG_FLAGS} -fsanitize=address -fno-omit-frame-pointer) +if(XSAN) + set(DEBUG_FLAGS ${DEBUG_FLAGS} "-fsanitize=${XSAN}" -fno-omit-frame-pointer) set(OPTIMIZE_FLAGS "-O0") -endif(ASAN) +endif(XSAN) if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") set(OPTIMIZE_FLAGS "") diff --git a/Makefile b/Makefile index 575be9f6a..f9081b175 100644 --- a/Makefile +++ b/Makefile @@ -80,8 +80,8 @@ SHARED_LIB ?= OFF # enable generating coverage COVERAGE ?= OFF COVERAGE_OUTDIR ?= "$(TMPDIR)/lokinet-coverage" -# enable ASAN -ASAN ?= OFF +# enable sanitizer +XSAN ?= False # cmake generator type CMAKE_GEN ?= Unix Makefiles @@ -109,9 +109,9 @@ else CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_SHELLHOOKS=$(SHELL_HOOKS) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'") CONFIG_CMD_WINDOWS = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=ON -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_SHELLHOOKS=$(SHELL_HOOKS) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'") -ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DASAN=$(ASAN) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'") +ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DXSAN=$(XSAN) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'") -COVERAGE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=yes -DASAN=$(ASAN) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'") +COVERAGE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=yes -DXSAN=$(XSAN) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'") endif TARGETS = $(REPO)/lokinet diff --git a/llarp/config/config.cpp b/llarp/config/config.cpp index 0d6b85d48..ceca8dbac 100644 --- a/llarp/config/config.cpp +++ b/llarp/config/config.cpp @@ -227,9 +227,9 @@ namespace llarp idx = v.find_first_of(delimiter); if(idx != std::string::npos) { - std::string val = v.substr(0, idx); - absl::StripAsciiWhitespace(&val); - parsed_opts.emplace(std::move(val)); + std::string data = v.substr(0, idx); + absl::StripAsciiWhitespace(&data); + parsed_opts.emplace(std::move(data)); v = v.substr(idx + 1); } else diff --git a/llarp/iwp/linklayer.cpp b/llarp/iwp/linklayer.cpp index 882c4f684..bbe426e21 100644 --- a/llarp/iwp/linklayer.cpp +++ b/llarp/iwp/linklayer.cpp @@ -90,6 +90,7 @@ namespace llarp } else { + Lock lock(&m_AuthedLinksMutex); auto range = m_AuthedLinks.equal_range(itr->second); session = range.first->second; }