From c0c305ee9e0e7c9feca6412266a778f330d20c19 Mon Sep 17 00:00:00 2001 From: David Marchand Date: Thu, 5 May 2022 11:29:52 +0200 Subject: [PATCH] ci: build some job with ASan Enable ASan, this can greatly help identify leaks and buffer overflows. Running unit tests relying on multiprocess is unreliable with ASan enabled, so skip them. Signed-off-by: David Marchand Acked-by: Aaron Conole --- .ci/linux-build.sh | 8 ++ .github/workflows/build.yml | 3 +- app/test/meson.build | 208 +++++++++++++++++++----------------- 3 files changed, 118 insertions(+), 101 deletions(-) diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh index 877243c9c8..1de8962f0e 100755 --- a/.ci/linux-build.sh +++ b/.ci/linux-build.sh @@ -104,6 +104,14 @@ if [ "$MINI" = "true" ]; then OPTS="$OPTS -Denable_drivers=net/null" OPTS="$OPTS -Ddisable_libs=*" fi + +if [ "$ASAN" = "true" ]; then + OPTS="$OPTS -Db_sanitize=address" + if [ "${CC%%clang}" != "$CC" ]; then + OPTS="$OPTS -Db_lundef=false" + fi +fi + meson build --werror $OPTS ninja -C build diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e2f94d786b..ad8ad1a187 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,7 @@ jobs: env: AARCH64: ${{ matrix.config.cross == 'aarch64' }} ABI_CHECKS: ${{ contains(matrix.config.checks, 'abi') }} + ASAN: ${{ contains(matrix.config.checks, 'asan') }} BUILD_32BIT: ${{ matrix.config.cross == 'i386' }} BUILD_DOCS: ${{ contains(matrix.config.checks, 'doc') }} CC: ccache ${{ matrix.config.compiler }} @@ -48,7 +49,7 @@ jobs: - os: ubuntu-20.04 compiler: clang library: shared - checks: doc+tests + checks: asan+doc+tests - os: ubuntu-20.04 compiler: gcc library: static diff --git a/app/test/meson.build b/app/test/meson.build index 5fc1dd1b7b..bb4621ed2a 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -149,96 +149,97 @@ test_deps = enabled_libs # as well as libs, the pci and vdev bus drivers are needed for a lot of tests test_deps += ['bus_pci', 'bus_vdev'] -# Each test is marked with flag true/false -# to indicate whether it can run in no-huge mode. +# Each test is marked with flags: +# - the first flag indicates whether the test can run in no-huge mode, +# - the second flag indicates whether the test can run with ASan enabled, fast_tests = [ - ['acl_autotest', true], - ['atomic_autotest', false], - ['bitmap_autotest', true], - ['bpf_autotest', true], - ['bpf_convert_autotest', true], - ['bitops_autotest', true], - ['byteorder_autotest', true], - ['cksum_autotest', true], - ['cmdline_autotest', true], - ['common_autotest', true], - ['cpuflags_autotest', true], - ['debug_autotest', true], - ['devargs_autotest', true], - ['eal_flags_c_opt_autotest', false], - ['eal_flags_main_opt_autotest', false], - ['eal_flags_n_opt_autotest', false], - ['eal_flags_hpet_autotest', false], - ['eal_flags_no_huge_autotest', false], - ['eal_flags_a_opt_autotest', false], - ['eal_flags_b_opt_autotest', false], - ['eal_flags_vdev_opt_autotest', false], - ['eal_flags_r_opt_autotest', false], - ['eal_flags_mem_autotest', false], - ['eal_flags_file_prefix_autotest', false], - ['eal_flags_misc_autotest', false], - ['eal_fs_autotest', true], - ['errno_autotest', true], - ['ethdev_link_status', true], - ['event_ring_autotest', true], - ['fib_autotest', true], - ['fib6_autotest', true], - ['func_reentrancy_autotest', false], - ['hash_autotest', true], - ['interrupt_autotest', true], - ['ipfrag_autotest', false], - ['lcores_autotest', true], - ['logs_autotest', true], - ['lpm_autotest', true], - ['lpm6_autotest', true], - ['malloc_autotest', false], - ['mbuf_autotest', false], - ['mcslock_autotest', false], - ['memcpy_autotest', true], - ['memory_autotest', false], - ['mempool_autotest', false], - ['memzone_autotest', false], - ['meter_autotest', true], - ['multiprocess_autotest', false], - ['per_lcore_autotest', true], - ['pflock_autotest', true], - ['prefetch_autotest', true], - ['rcu_qsbr_autotest', true], - ['pie_autotest', true], - ['rib_autotest', true], - ['rib6_autotest', true], - ['ring_autotest', true], - ['rwlock_test1_autotest', true], - ['rwlock_rda_autotest', true], - ['rwlock_rds_wrm_autotest', true], - ['rwlock_rde_wro_autotest', true], - ['sched_autotest', true], - ['security_autotest', false], - ['spinlock_autotest', true], - ['stack_autotest', false], - ['stack_lf_autotest', false], - ['string_autotest', true], - ['tailq_autotest', true], - ['ticketlock_autotest', true], - ['timer_autotest', false], - ['user_delay_us', true], - ['version_autotest', true], - ['crc_autotest', true], - ['distributor_autotest', false], - ['eventdev_common_autotest', true], - ['fbarray_autotest', true], - ['hash_readwrite_func_autotest', false], - ['ipsec_autotest', true], - ['kni_autotest', false], - ['kvargs_autotest', true], - ['member_autotest', true], - ['power_cpufreq_autotest', false], - ['power_autotest', true], - ['power_kvm_vm_autotest', false], - ['reorder_autotest', true], - ['service_autotest', true], - ['thash_autotest', true], - ['trace_autotest', true], + ['acl_autotest', true, true], + ['atomic_autotest', false, true], + ['bitmap_autotest', true, true], + ['bpf_autotest', true, true], + ['bpf_convert_autotest', true, true], + ['bitops_autotest', true, true], + ['byteorder_autotest', true, true], + ['cksum_autotest', true, true], + ['cmdline_autotest', true, true], + ['common_autotest', true, true], + ['cpuflags_autotest', true, true], + ['debug_autotest', true, true], + ['devargs_autotest', true, true], + ['eal_flags_c_opt_autotest', false, false], + ['eal_flags_main_opt_autotest', false, false], + ['eal_flags_n_opt_autotest', false, false], + ['eal_flags_hpet_autotest', false, false], + ['eal_flags_no_huge_autotest', false, false], + ['eal_flags_a_opt_autotest', false, false], + ['eal_flags_b_opt_autotest', false, false], + ['eal_flags_vdev_opt_autotest', false, false], + ['eal_flags_r_opt_autotest', false, false], + ['eal_flags_mem_autotest', false, false], + ['eal_flags_file_prefix_autotest', false, false], + ['eal_flags_misc_autotest', false, false], + ['eal_fs_autotest', true, true], + ['errno_autotest', true, true], + ['ethdev_link_status', true, true], + ['event_ring_autotest', true, true], + ['fib_autotest', true, true], + ['fib6_autotest', true, true], + ['func_reentrancy_autotest', false, true], + ['hash_autotest', true, true], + ['interrupt_autotest', true, true], + ['ipfrag_autotest', false, true], + ['lcores_autotest', true, true], + ['logs_autotest', true, true], + ['lpm_autotest', true, true], + ['lpm6_autotest', true, true], + ['malloc_autotest', false, true], + ['mbuf_autotest', false, true], + ['mcslock_autotest', false, true], + ['memcpy_autotest', true, true], + ['memory_autotest', false, true], + ['mempool_autotest', false, true], + ['memzone_autotest', false, true], + ['meter_autotest', true, true], + ['multiprocess_autotest', false, false], + ['per_lcore_autotest', true, true], + ['pflock_autotest', true, true], + ['prefetch_autotest', true, true], + ['rcu_qsbr_autotest', true, true], + ['pie_autotest', true, true], + ['rib_autotest', true, true], + ['rib6_autotest', true, true], + ['ring_autotest', true, true], + ['rwlock_test1_autotest', true, true], + ['rwlock_rda_autotest', true, true], + ['rwlock_rds_wrm_autotest', true, true], + ['rwlock_rde_wro_autotest', true, true], + ['sched_autotest', true, true], + ['security_autotest', false, true], + ['spinlock_autotest', true, true], + ['stack_autotest', false, true], + ['stack_lf_autotest', false, true], + ['string_autotest', true, true], + ['tailq_autotest', true, true], + ['ticketlock_autotest', true, true], + ['timer_autotest', false, true], + ['user_delay_us', true, true], + ['version_autotest', true, true], + ['crc_autotest', true, true], + ['distributor_autotest', false, true], + ['eventdev_common_autotest', true, true], + ['fbarray_autotest', true, true], + ['hash_readwrite_func_autotest', false, true], + ['ipsec_autotest', true, true], + ['kni_autotest', false, true], + ['kvargs_autotest', true, true], + ['member_autotest', true, true], + ['power_cpufreq_autotest', false, true], + ['power_autotest', true, true], + ['power_kvm_vm_autotest', false, true], + ['reorder_autotest', true, true], + ['service_autotest', true, true], + ['thash_autotest', true, true], + ['trace_autotest', true, true], ] # Tests known to have issues or which don't belong in other tests lists. @@ -345,15 +346,16 @@ endif if dpdk_conf.has('RTE_LIB_FLOW_CLASSIFY') test_sources += 'test_flow_classify.c' - fast_tests += [['flow_classify_autotest', false]] + fast_tests += [['flow_classify_autotest', false, true]] endif if dpdk_conf.has('RTE_LIB_METRICS') test_sources += ['test_metrics.c'] - fast_tests += [['metrics_autotest', true]] + fast_tests += [['metrics_autotest', true, true]] endif if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY') test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] - fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]] + fast_tests += [['telemetry_json_autotest', true, true]] + fast_tests += [['telemetry_data_autotest', true, true]] endif if dpdk_conf.has('RTE_LIB_PIPELINE') # pipeline lib depends on port and table libs, so those must be present @@ -366,7 +368,7 @@ if dpdk_conf.has('RTE_LIB_PIPELINE') 'test_table_ports.c', 'test_table_tables.c', ] - fast_tests += [['table_autotest', true]] + fast_tests += [['table_autotest', true, true]] endif # The following linkages of drivers are required because @@ -386,26 +388,26 @@ if dpdk_conf.has('RTE_NET_RING') test_sources += 'test_pmd_ring.c' test_sources += 'test_event_eth_tx_adapter.c' test_sources += 'sample_packet_forward.c' - fast_tests += [['ring_pmd_autotest', true]] + fast_tests += [['ring_pmd_autotest', true, true]] perf_test_names += 'ring_pmd_perf_autotest' - fast_tests += [['event_eth_tx_adapter_autotest', false]] + fast_tests += [['event_eth_tx_adapter_autotest', false, true]] if dpdk_conf.has('RTE_LIB_BITRATESTATS') test_sources += 'test_bitratestats.c' - fast_tests += [['bitratestats_autotest', true]] + fast_tests += [['bitratestats_autotest', true, true]] endif if dpdk_conf.has('RTE_LIB_LATENCYSTATS') test_sources += 'test_latencystats.c' - fast_tests += [['latencystats_autotest', true]] + fast_tests += [['latencystats_autotest', true, true]] endif if dpdk_conf.has('RTE_LIB_PDUMP') test_sources += 'test_pdump.c' - fast_tests += [['pdump_autotest', true]] + fast_tests += [['pdump_autotest', true, false]] endif endif if dpdk_conf.has('RTE_NET_NULL') test_deps += 'net_null' test_sources += 'test_vdev.c' - fast_tests += [['vdev_autotest', true]] + fast_tests += [['vdev_autotest', true, true]] endif if dpdk_conf.has('RTE_HAS_LIBPCAP') @@ -431,7 +433,7 @@ if dpdk_conf.has('RTE_LIB_COMPRESSDEV') if compress_test_dep.found() test_dep_objs += compress_test_dep test_sources += 'test_compressdev.c' - fast_tests += [['compressdev_autotest', false]] + fast_tests += [['compressdev_autotest', false, true]] endif endif @@ -478,6 +480,12 @@ foreach arg : fast_tests endif endif + if get_option('b_sanitize') == 'address' or get_option('b_sanitize') == 'address,undefined' + if not arg[2] + run_test = false + endif + endif + if (get_option('default_library') == 'shared' and arg[0] == 'event_eth_tx_adapter_autotest') foreach drv:dpdk_drivers -- 2.39.5