Allow turning on multiple sanitizers (#611)

Consolidate the ASan and UBSan buildbots and turn on both sanitizers
when fuzzing.
This commit is contained in:
Ben Noordhuis 2024-10-20 12:41:17 +02:00 committed by GitHub
parent 966dbfc1f9
commit bed51fab0a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 19 additions and 14 deletions

View file

@ -52,8 +52,7 @@ jobs:
- { os: ubuntu-latest, configType: Release, runTest262: true, runV8: true } - { os: ubuntu-latest, configType: Release, runTest262: true, runV8: true }
- { os: ubuntu-latest, configType: examples } - { os: ubuntu-latest, configType: examples }
- { os: ubuntu-latest, configType: shared } - { os: ubuntu-latest, configType: shared }
- { os: ubuntu-latest, configType: asan, runTest262: true } - { os: ubuntu-latest, configType: asan+ubsan, runTest262: true }
- { os: ubuntu-latest, configType: ubsan, runTest262: true }
- { os: ubuntu-latest, configType: msan } - { os: ubuntu-latest, configType: msan }
- { os: ubuntu-latest, configType: tcc } - { os: ubuntu-latest, configType: tcc }
- { os: ubuntu-latest, arch: x86 } - { os: ubuntu-latest, arch: x86 }
@ -64,15 +63,13 @@ jobs:
- { os: macos-14, configType: Release } - { os: macos-14, configType: Release }
- { os: macos-14, configType: examples } - { os: macos-14, configType: examples }
- { os: macos-14, configType: shared } - { os: macos-14, configType: shared }
- { os: macos-14, configType: asan } - { os: macos-14, configType: asan+ubsan }
- { os: macos-14, configType: ubsan }
- { os: macos-12, configType: Debug } - { os: macos-12, configType: Debug }
- { os: macos-12, configType: Release } - { os: macos-12, configType: Release }
- { os: macos-12, configType: examples } - { os: macos-12, configType: examples }
- { os: macos-12, configType: shared } - { os: macos-12, configType: shared }
- { os: macos-12, configType: asan } - { os: macos-12, configType: asan+ubsan }
- { os: macos-12, configType: ubsan }
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@ -80,7 +77,7 @@ jobs:
# ASLR with big PIE slides does not work well with [AM]San # ASLR with big PIE slides does not work well with [AM]San
- name: disable ASLR - name: disable ASLR
if: ${{ matrix.config.os == 'ubuntu-latest' && (matrix.config.configType == 'asan' || matrix.config.configType == 'ubsan' || matrix.config.configType == 'msan')}} if: ${{ matrix.config.os == 'ubuntu-latest' && (matrix.config.configType == 'asan+ubsan' || matrix.config.configType == 'msan')}}
run: | run: |
sudo sysctl -w kernel.randomize_va_space=0 sudo sysctl -w kernel.randomize_va_space=0
@ -119,11 +116,9 @@ jobs:
echo "BUILD_EXAMPLES=ON" >> $GITHUB_ENV; echo "BUILD_EXAMPLES=ON" >> $GITHUB_ENV;
elif [ "${{ matrix.config.configType }}" = "shared" ]; then elif [ "${{ matrix.config.configType }}" = "shared" ]; then
echo "BUILD_SHARED_LIBS=ON" >> $GITHUB_ENV; echo "BUILD_SHARED_LIBS=ON" >> $GITHUB_ENV;
elif [ "${{ matrix.config.configType }}" = "asan" ]; then elif [ "${{ matrix.config.configType }}" = "asan+ubsan" ]; then
echo "BUILD_TYPE=RelWithDebInfo" >> $GITHUB_ENV; echo "BUILD_TYPE=RelWithDebInfo" >> $GITHUB_ENV;
echo "CONFIG_ASAN=ON" >> $GITHUB_ENV; echo "CONFIG_ASAN=ON" >> $GITHUB_ENV;
elif [ "${{ matrix.config.configType }}" = "ubsan" ]; then
echo "BUILD_TYPE=RelWithDebInfo" >> $GITHUB_ENV;
echo "CONFIG_UBSAN=ON" >> $GITHUB_ENV; echo "CONFIG_UBSAN=ON" >> $GITHUB_ENV;
elif [ "${{ matrix.config.configType }}" = "msan" ]; then elif [ "${{ matrix.config.configType }}" = "msan" ]; then
echo "BUILD_TYPE=RelWithDebInfo" >> $GITHUB_ENV; echo "BUILD_TYPE=RelWithDebInfo" >> $GITHUB_ENV;

View file

@ -108,6 +108,10 @@ if(BUILD_SHARED_LIBS)
message(STATUS "Building a shared library") message(STATUS "Building a shared library")
endif() endif()
# note: CONFIG_TSAN is currently incompatible with the other sanitizers but we
# don't explicitly check for that because who knows what the future will bring?
# CONFIG_MSAN only works with clang at the time of writing; also not checked
# for the same reason
xoption(BUILD_EXAMPLES "Build examples" OFF) xoption(BUILD_EXAMPLES "Build examples" OFF)
xoption(BUILD_STATIC_QJS_EXE "Build a static qjs executable" OFF) xoption(BUILD_STATIC_QJS_EXE "Build a static qjs executable" OFF)
xoption(BUILD_CLI_WITH_MIMALLOC "Build the qjs executable with mimalloc" OFF) xoption(BUILD_CLI_WITH_MIMALLOC "Build the qjs executable with mimalloc" OFF)
@ -132,7 +136,9 @@ add_link_options(
-fno-sanitize-recover=all -fno-sanitize-recover=all
-fno-omit-frame-pointer -fno-omit-frame-pointer
) )
elseif(CONFIG_MSAN) endif()
if(CONFIG_MSAN)
message(STATUS "Building with MSan") message(STATUS "Building with MSan")
add_compile_options( add_compile_options(
-fsanitize=memory -fsanitize=memory
@ -144,7 +150,9 @@ add_link_options(
-fno-sanitize-recover=all -fno-sanitize-recover=all
-fno-omit-frame-pointer -fno-omit-frame-pointer
) )
elseif(CONFIG_TSAN) endif()
if(CONFIG_TSAN)
message(STATUS "Building with TSan") message(STATUS "Building with TSan")
add_compile_options( add_compile_options(
-fsanitize=thread -fsanitize=thread
@ -156,7 +164,9 @@ add_link_options(
-fno-sanitize-recover=all -fno-sanitize-recover=all
-fno-omit-frame-pointer -fno-omit-frame-pointer
) )
elseif(CONFIG_UBSAN) endif()
if(CONFIG_UBSAN)
message(STATUS "Building with UBSan") message(STATUS "Building with UBSan")
add_compile_definitions( add_compile_definitions(
__UBSAN__=1 __UBSAN__=1

View file

@ -45,7 +45,7 @@ endif
all: $(QJS) all: $(QJS)
fuzz: fuzz:
clang -g -O1 -fsanitize=fuzzer -o fuzz fuzz.c clang -g -O1 -fsanitize=address,undefined,fuzzer -o fuzz fuzz.c
./fuzz ./fuzz
$(BUILD_DIR): $(BUILD_DIR):