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 <david.marchand@redhat.com>
Acked-by: Aaron Conole <aconole@redhat.com>
This commit is contained in:
David Marchand 2022-05-05 11:29:52 +02:00
parent 48ff13ef37
commit c0c305ee9e
3 changed files with 118 additions and 101 deletions

View File

@ -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

View File

@ -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

View File

@ -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