From e16a3d7a8e82b79296feac31c18dbfd52761a0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ayd=C4=B1n=20Mercan?= Date: Mon, 1 Sep 2025 10:33:22 +0300 Subject: [PATCH] embed default sanitizer flags in executables Replicating CI failures requires the developer to piece together the sanitizer flags by hand, reducing ergonomics. Fix this problem by embedding the relevant settings to the executables. Symbol resolution still needs manual intervention by setting the env variable `*SAN_SYMBOLIZER_PATH`. However, this doesn't affect any behavior. --- .gitattributes | 1 - .gitlab-ci.yml | 36 +++++--------- .tsan-suppress | 9 ---- ci/sanitizer_default_check.py | 78 +++++++++++++++++++++++++++++ doc/misc/meson.build | 1 + lib/dns/meson.build | 1 + meson.build | 65 ++++++++++++++++++++++-- sanitize.c.in | 93 +++++++++++++++++++++++++++++++++++ suppr-lsan.txt | 29 ----------- tests/bench/meson.build | 2 + tests/dns/meson.build | 2 + tests/isc/meson.build | 3 +- tests/isccfg/meson.build | 2 + tests/ns/meson.build | 2 + 14 files changed, 257 insertions(+), 67 deletions(-) delete mode 100644 .tsan-suppress create mode 100755 ci/sanitizer_default_check.py create mode 100644 sanitize.c.in delete mode 100644 suppr-lsan.txt diff --git a/.gitattributes b/.gitattributes index 8df340caef..e2a0641fbf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,7 +12,6 @@ .gitlab-ci.yml export-ignore .pylintrc export-ignore .readthedocs.yaml export-ignore -.tsan-suppress export-ignore .uncrustify.cfg export-ignore dangerfile.py export-ignore /.github/** export-ignore diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bf7afac45c..3b8e02c465 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,19 +31,9 @@ variables: CFLAGS_COMMON: -fno-omit-frame-pointer -fno-optimize-sibling-calls - UBASAN_CONFIGURE_FLAGS_COMMON: "-Db_sanitize=address,undefined -Didn=enabled -Djemalloc=disabled -Dtracing=disabled" - TSAN_CONFIGURE_FLAGS_COMMON: "-Db_sanitize=thread -Doptimization=2 -Ddebug=true -Didn=enabled -Dlocktype=system -Djemalloc=disabled --pkg-config-path /opt/tsan/lib/pkgconfig" - - # Pass run-time flags to AddressSanitizer to get core dumps on error. - ASAN_OPTIONS: abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1:detect_odr_violation=0 - ASAN_SYMBOLIZER_PATH: "${LLVM_SYMBOLIZER}" - - TSAN_OPTIONS_COMMON: "disable_coredump=0 second_deadlock_stack=1 atexit_sleep_ms=1000 history_size=7 log_exe_name=true log_path=tsan" - TSAN_SUPPRESSIONS: "suppressions=${CI_PROJECT_DIR}/.tsan-suppress" - TSAN_OPTIONS_DEBIAN: "${TSAN_OPTIONS_COMMON} ${TSAN_SUPPRESSIONS} external_symbolizer_path=${LLVM_SYMBOLIZER}" - TSAN_OPTIONS_FEDORA: "${TSAN_OPTIONS_COMMON} ${TSAN_SUPPRESSIONS} external_symbolizer_path=/usr/bin/llvm-symbolizer" - - UBSAN_OPTIONS: "halt_on_error=1:abort_on_error=1:disable_coredump=0" + TSAN_CONFIGURE_FLAGS_COMMON: "-Db_sanitize=thread -Doptimization=2 -Ddebug=true -Didn=enabled -Dlocktype=system -Djemalloc=disabled -Dnamed-lto=disabled --pkg-config-path /opt/tsan/lib/pkgconfig" + TSAN_SYMBOLIZER_PATH_DEBIAN: "${LLVM_SYMBOLIZER}" + TSAN_SYMBOLIZER_PATH_FEDORA: "/usr/bin/llvm-symbolizer" WITHOUT_LIBEDIT: "-Dline=disabled" WITH_LIBEDIT: "-Dline=enabled" @@ -449,6 +439,9 @@ stages: #- test -z "${CROSS_COMPILATION}" || grep -F -A 1 "checking whether we are cross compiling" config.log | grep -q "result.*yes" - test -z "${CROSS_COMPILATION}" || file build/lib/dns/gen | grep -F -q "ELF 64-bit LSB" #- test -z "${CROSS_COMPILATION}" || ( ! git ls-files -z --others --exclude lib/dns/gen | xargs -0 file | grep "ELF 64-bit LSB" ) + - *find_python + # Check that embedded sanitizer flags are in sync with the `meson.build` file. + - $PYTHON ${CI_PROJECT_DIR}/ci/sanitizer_default_check.py build - build/named -V - *fips_feature_test needs: [] @@ -1572,8 +1565,6 @@ gcc:asan: <<: *build_job system:gcc:asan: - variables: - LSAN_OPTIONS: "suppressions=$CI_PROJECT_DIR/suppr-lsan.txt" <<: *fedora_43_amd64_image <<: *system_test_job needs: @@ -1596,8 +1587,6 @@ clang:asan: <<: *build_job system:clang:asan: - variables: - LSAN_OPTIONS: "suppressions=$CI_PROJECT_DIR/suppr-lsan.txt" <<: *base_image <<: *system_test_job <<: *extra_system_tests_triggering_rules @@ -1626,7 +1615,6 @@ gcc:tsan: system:gcc:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_FEDORA}" <<: *tsan_fedora_43_amd64_image <<: *system_test_tsan_job <<: *extra_system_tests_triggering_rules @@ -1636,7 +1624,7 @@ system:gcc:tsan: unit:gcc:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_FEDORA}" + TSAN_SYMBOLIZER_PATH: "${TSAN_SYMBOLIZER_PATH_FEDORA}" <<: *tsan_fedora_43_amd64_image <<: *unit_test_tsan_job <<: *api_pipelines_schedules_tags_triggers_web_triggering_rules @@ -1651,12 +1639,12 @@ clang:tsan: CC: "${CLANG}" CFLAGS: "${CFLAGS_COMMON}" LDFLAGS: "-Wl,--disable-new-dtags" - EXTRA_CONFIGURE: "${TSAN_CONFIGURE_FLAGS_COMMON} -Db_lundef=false -Dnamed-lto=disabled --native-file ci/clang-trixie.ini" + EXTRA_CONFIGURE: "${TSAN_CONFIGURE_FLAGS_COMMON} -Db_lundef=false --native-file ci/clang-trixie.ini" <<: *build_job system:clang:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" + TSAN_SYMBOLIZER_PATH: "${TSAN_SYMBOLIZER_PATH_DEBIAN}" <<: *tsan_debian_trixie_amd64_image <<: *system_test_tsan_job needs: @@ -1665,7 +1653,7 @@ system:clang:tsan: unit:clang:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" + TSAN_SYMBOLIZER_PATH: "${TSAN_SYMBOLIZER_PATH_DEBIAN}" <<: *tsan_debian_trixie_amd64_image <<: *unit_test_tsan_job needs: @@ -2278,9 +2266,9 @@ respdiff:tsan: CC: "${CLANG}" CFLAGS: "${CFLAGS_COMMON}" LDFLAGS: "-Wl,--disable-new-dtags" - EXTRA_CONFIGURE: "${TSAN_CONFIGURE_FLAGS_COMMON} -Dnamed-lto=disabled -Db_lundef=false" + EXTRA_CONFIGURE: "${TSAN_CONFIGURE_FLAGS_COMMON} -Db_lundef=false" MAX_DISAGREEMENTS_PERCENTAGE: "0.3" - TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" + TSAN_SYMBOLIZER_PATH: "${TSAN_SYMBOLIZER_PATH_DEBIAN}" script: - bash respdiff.sh -s named -q "${PWD}/100k_mixed.txt" -c 3 -w "${PWD}/rspworkdir" "${CI_PROJECT_DIR}" "/usr/local/respdiff-reference-bind/sbin/named" - cd ../.. && ninja -C build clean >/dev/null 2>&1 diff --git a/.tsan-suppress b/.tsan-suppress deleted file mode 100644 index c12884d27a..0000000000 --- a/.tsan-suppress +++ /dev/null @@ -1,9 +0,0 @@ -# Uninstrumented libraries -called_from_lib:libfstrm.so -race:dummyrpz - -# FreeBSD false-positive, see GL#5267 -race:libexec/rtld-elf/rtld_malloc.c - -# FreeBSD false-positive, see GL#5266 -deadlock:add_trace_entry diff --git a/ci/sanitizer_default_check.py b/ci/sanitizer_default_check.py new file mode 100755 index 0000000000..9a72a00387 --- /dev/null +++ b/ci/sanitizer_default_check.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + + +from pathlib import Path + +import argparse +import json +import subprocess +import sys + +ASAN = False +UBSAN = False +TSAN = False + +args = argparse.ArgumentParser() +args.add_argument("build") +args = args.parse_args() + +build = Path(args.build) + +# https://mesonbuild.com/IDE-integration.html#build-options +# +# e.g. { "name": "b_sanitize", "value": ["address", "undefined"], ... } +# +with (build / "meson-info" / "intro-buildoptions.json").open() as f: + options = json.load(f) + + for opt in options: + if opt["name"] == "b_sanitize": + ASAN = "address" in opt["value"] + UBSAN = "undefined" in opt["value"] + TSAN = "thread" in opt["value"] + break + +if not (ASAN or UBSAN or TSAN): + print("no sanitizer check necessary") + sys.exit(0) + +with (build / "meson-info" / "intro-targets.json").open() as f: + targets = json.load(f) + + for target in targets: + if target["type"] == "executable" and Path(target["filename"][0]).exists(): + nm = subprocess.run( + ["nm", target["filename"][0]], + stdin=None, + stdout=subprocess.PIPE, + timeout=1, + check=True, + shell=False, + ) + + if ASAN and b"__asan_default_options" not in nm.stdout: + print(f"Default ASAN options missing for executable '{target['name']}'") + sys.exit(1) + + if UBSAN and b"__ubsan_default_options" not in nm.stdout: + print( + f"Default UBSAN options missing for executable '{target['name']}'" + ) + sys.exit(1) + + if TSAN and b"__tsan_default_options" not in nm.stdout: + print(f"Default TSAN options missing for executable '{target['name']}'") + sys.exit(1) + +print("all relevant sanitizer defaults are set") diff --git a/doc/misc/meson.build b/doc/misc/meson.build index c27e129eb0..17c6b1a75a 100644 --- a/doc/misc/meson.build +++ b/doc/misc/meson.build @@ -15,6 +15,7 @@ cfg_test = executable( 'cfg_test', files('cfg_test.c'), install: false, + sources: default_sanitize_options, dependencies: [ libisc_dep, libisccfg_dep, diff --git a/lib/dns/meson.build b/lib/dns/meson.build index 96168d5e36..61b64bbfa4 100644 --- a/lib/dns/meson.build +++ b/lib/dns/meson.build @@ -23,6 +23,7 @@ dns_gen_headers = [] dns_header_gen = executable( 'gen', files('gen.c'), + sources: default_sanitize_options, install: false, native: true, ) diff --git a/meson.build b/meson.build index 91d4924356..81e608cfbd 100644 --- a/meson.build +++ b/meson.build @@ -246,6 +246,22 @@ sys_defines = [ add_project_arguments(sys_defines, language: 'c') +### Sanitizer +asan_options = 'abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1:detect_odr_violation=0' +tsan_options = 'disable_coredump=0:second_deadlock_stack=1:atexit_sleep_ms=1000:history_size=7:log_exe_name=true:log_path=tsan' +ubsan_options = 'halt_on_error=1:abort_on_error=1:disable_coredump=0' + +# Refer to sanitize.c.in for the justification +config_sanitize = configuration_data() + +config_sanitize.set10('BIND_ASAN_ENABLED', 'address' in sanitizer) +config_sanitize.set10('BIND_LSAN_ENABLED', 'leak' in sanitizer) +config_sanitize.set10('BIND_TSAN_ENABLED', 'thread' in sanitizer) +config_sanitize.set10('BIND_UBSAN_ENABLED', 'undefined' in sanitizer) +config_sanitize.set('BIND_ASAN_OPTIONS', asan_options) +config_sanitize.set('BIND_TSAN_OPTIONS', tsan_options) +config_sanitize.set('BIND_UBSAN_OPTIONS', ubsan_options) + ### Environment env = environment( @@ -256,6 +272,15 @@ env = environment( }, ) +# Meson defines these variables in unit tests when not set +test_env = environment( + { + 'ASAN_OPTIONS': asan_options, + 'TSAN_OPTIONS': tsan_options, + 'UBSAN_OPTIONS': ubsan_options, + }, +) + ### Configuration config = configuration_data() @@ -1093,6 +1118,12 @@ bind_keys = custom_target( ], ) +default_sanitize_options = configure_file( + input: files('sanitize.c.in'), + output: 'sanitize.c', + configuration: config_sanitize, +) + # Headers dns_inc = include_directories('lib' / 'dns' / 'include') isc_inc = include_directories('lib' / 'isc' / 'include') @@ -1313,6 +1344,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libisc_dep, ], @@ -1324,7 +1356,7 @@ executable( export_dynamic: true, implicit_include_directories: true, install: true, - sources: bind_keys, + sources: [bind_keys, default_sanitize_options], dependencies: [ libisc_dep, libisccfg_dep, @@ -1338,6 +1370,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1353,6 +1386,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1366,6 +1400,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1379,6 +1414,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1392,6 +1428,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1405,6 +1442,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1418,6 +1456,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1431,6 +1470,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1444,6 +1484,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1457,6 +1498,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1470,6 +1512,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1484,6 +1527,7 @@ if config.has('HAVE_DNSTAP') export_dynamic: true, implicit_include_directories: true, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1499,6 +1543,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1514,6 +1559,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1527,7 +1573,7 @@ executable( implicit_include_directories: true, include_directories: [bin_inc], install: true, - sources: bind_keys, + sources: [bind_keys, default_sanitize_options], dependencies: [ libisc_dep, libdns_dep, @@ -1541,6 +1587,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libisc_dep, libdns_dep, @@ -1561,6 +1608,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1573,6 +1621,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1585,6 +1634,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1599,6 +1649,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1653,7 +1704,7 @@ executable( include_directories: [named_inc, bin_inc], install: true, install_dir: sbindir, - sources: bind_keys, + sources: [bind_keys, default_sanitize_options], dependencies: named_deps + [ openssl_dep, @@ -1677,6 +1728,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1689,6 +1741,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1705,6 +1758,7 @@ executable( export_dynamic: true, implicit_include_directories: false, install: true, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1724,6 +1778,7 @@ executable( include_directories: confgen_inc_p, install: true, install_dir: sbindir, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1737,6 +1792,7 @@ executable( implicit_include_directories: false, install: true, install_dir: sbindir, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1753,6 +1809,7 @@ executable( include_directories: confgen_inc_p, install: true, install_dir: sbindir, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1823,6 +1880,7 @@ foreach name, sources : fuzz_binaries install: false, c_args: ['-Wno-vla'], link_args: fuzz_link_args, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, @@ -1847,6 +1905,7 @@ foreach name, sources : system_test_binaries export_dynamic: true, implicit_include_directories: false, install: false, + sources: default_sanitize_options, dependencies: [ libdns_dep, libisc_dep, diff --git a/sanitize.c.in b/sanitize.c.in new file mode 100644 index 0000000000..8b5a9fcefe --- /dev/null +++ b/sanitize.c.in @@ -0,0 +1,93 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +/* + * We do not use `__SANITIZE_XXXX__` or `__has_feature` for the following + * reasons: + * + * - `__SANITIZE_UNDEFINED__` doesn't exist at all (currently GCC 15 & clang 21) + * - Other `__SANITIZE_XXXX__` macros don't exist in clang <23 [1] + * - `__has_feature` doesn't exist in GCC <14 [2] + * + * [1]: https://github.com/llvm/llvm-project/pull/153888 + * [2]: https://gcc.gnu.org/gcc-14/changes.html#c-family + */ + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-prototypes" + +#if @BIND_ASAN_ENABLED@ +__attribute__((no_sanitize("address", "leak", "thread", "undefined"))) +const char * +__asan_default_options(void) { + return "@BIND_ASAN_OPTIONS@"; +} +#endif + +/* ASAN will usually also enable LSAN */ +#if @BIND_ASAN_ENABLED@ || @BIND_LSAN_ENABLED@ +__attribute__((no_sanitize("address", "leak", "thread", "undefined"))) +const char * +__lsan_default_suppressions(void) { + return + /* These are known leaks in libp11 */ + "leak:BN_MONT_CTX_new\n" + "leak:C_LoadModule\n" + "leak:ctx_new\n" + "leak:ctx_try_load_object\n" + "leak:dlfcn_name_converter\n" + "leak:EC_GROUP_set_seed\n" + "leak:CRYPTO_strdup\n" + "leak:CRYPTO_zalloc\n" + "leak:pkcs11_check_token\n" + "leak:pkcs11_CTX_new\n" + "leak:pkcs11_enumerate_slots\n" + "leak:pkcs11_getattr_alloc\n" + "leak:pkcs11_init_key\n" + "leak:pkcs11_strdup\n" + "leak:xmlGetGlobalState\n" + "leak:xmlNewGlobalState\n" + "leak:__xmlDefaultBufferSize\n"; +} +#endif + +#if @BIND_TSAN_ENABLED@ +__attribute__((no_sanitize("address", "leak", "thread", "undefined"))) +const char * +__tsan_default_options(void) { + return "@BIND_TSAN_OPTIONS@"; +} + +__attribute__((no_sanitize("address", "leak", "thread", "undefined"))) +const char * +__tsan_default_suppressions(void) { + return + /* Uninstrumented libraries */ + "called_from_lib:libfstrm.so\n" + "race:dummyrpz\n" + /* FreeBSD false-positive, see GL#5267 */ + "race:libexec/rtld-elf/rtld_malloc.c\n" + /* FreeBSD false-positive, see GL#5266 */ + "deadlock:add_trace_entry"; +} +#endif + +#if @BIND_UBSAN_ENABLED@ +__attribute__((no_sanitize("address", "leak", "thread", "undefined"))) +const char * +__ubsan_default_options(void) { + return "@BIND_UBSAN_OPTIONS@"; +} +#endif + +#pragma GCC diagnostic pop diff --git a/suppr-lsan.txt b/suppr-lsan.txt deleted file mode 100644 index ac08aa9a88..0000000000 --- a/suppr-lsan.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) Internet Systems Consortium, Inc. ("ISC") -# -# SPDX-License-Identifier: MPL-2.0 -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, you can obtain one at https://mozilla.org/MPL/2.0/. -# -# See the COPYRIGHT file distributed with this work for additional -# information regarding copyright ownership. - -# These are known leaks in libp11. -leak:BN_MONT_CTX_new -leak:C_LoadModule -leak:ctx_new -leak:ctx_try_load_object -leak:dlfcn_name_converter -leak:EC_GROUP_set_seed -leak:CRYPTO_strdup -leak:CRYPTO_zalloc -leak:pkcs11_check_token -leak:pkcs11_CTX_new -leak:pkcs11_enumerate_slots -leak:pkcs11_getattr_alloc -leak:pkcs11_init_key -leak:pkcs11_strdup -leak:xmlGetGlobalState -leak:xmlNewGlobalState -leak:__xmlDefaultBufferSize diff --git a/tests/bench/meson.build b/tests/bench/meson.build index b16b529ada..ec1bf9dee9 100644 --- a/tests/bench/meson.build +++ b/tests/bench/meson.build @@ -24,6 +24,7 @@ foreach bench : [ files(fs.replace_suffix(bench, '.c')), export_dynamic: true, install: false, + sources: default_sanitize_options, dependencies: [ libisc_dep, libdns_dep, @@ -42,6 +43,7 @@ executable( export_dynamic: true, include_directories: '..' / '..' / 'fuzz', install: false, + sources: default_sanitize_options, dependencies: [ libisc_dep, libdns_dep, diff --git a/tests/dns/meson.build b/tests/dns/meson.build index 72b6754719..ba166f5a72 100644 --- a/tests/dns/meson.build +++ b/tests/dns/meson.build @@ -77,6 +77,7 @@ foreach unit : dns_tests meson.project_source_root() / 'bin' / 'tests' / 'system' / 'geoip2' / 'data', ), ], + sources: default_sanitize_options, dependencies: [ libisc_dep, libdns_dep, @@ -95,6 +96,7 @@ foreach unit : dns_tests unit, test_bin, depends: master_data, + env: test_env, suite: ['dns', 'cmocka'], timeout: 300, workdir: meson.current_source_dir(), diff --git a/tests/isc/meson.build b/tests/isc/meson.build index 5aa7ecafee..0029ae6130 100644 --- a/tests/isc/meson.build +++ b/tests/isc/meson.build @@ -77,6 +77,7 @@ foreach unit : isc_test build_by_default: false, export_dynamic: true, install: false, + sources: default_sanitize_options, dependencies: [ libisc_dep, libtest_dep, @@ -101,9 +102,9 @@ foreach unit : isc_test test( unit, test_bin, + env: test_env, suite: suites, timeout: timeout, workdir: meson.current_source_dir(), - env: env, ) endforeach diff --git a/tests/isccfg/meson.build b/tests/isccfg/meson.build index ece606e0a0..0055f42f43 100644 --- a/tests/isccfg/meson.build +++ b/tests/isccfg/meson.build @@ -20,6 +20,7 @@ foreach unit : [ build_by_default: false, export_dynamic: true, install: false, + sources: default_sanitize_options, dependencies: [ libisc_dep, libisccfg_dep, @@ -32,6 +33,7 @@ foreach unit : [ test( unit, test_bin, + env: test_env, suite: ['isccfg', 'cmocka'], timeout: 300, workdir: meson.current_source_dir(), diff --git a/tests/ns/meson.build b/tests/ns/meson.build index dc14986280..75c5260223 100644 --- a/tests/ns/meson.build +++ b/tests/ns/meson.build @@ -20,6 +20,7 @@ foreach unit : [ build_by_default: false, export_dynamic: true, install: false, + sources: default_sanitize_options, dependencies: [ libisc_dep, libdns_dep, @@ -36,6 +37,7 @@ foreach unit : [ test( unit, test_bin, + env: test_env, suite: ['ns', 'cmocka'], timeout: 300, workdir: meson.current_source_dir(),