Address sanitizer sees memory leaks when using AF_XDP (--xdp option).
To Reproduce
Steps to reproduce the behavior:
- ./configure --enable-asan
- make
- Create veth pair (ip link add type veth; ip link set dev veth0 up; ip link set veth1 up)
Expected behavior
no memory leaks detected by ASAN
Screenshots
❯ sudo src/tcpreplay --xdp --no-flow-stats -W -i veth0 ../test/test.pcap
Actual: 179 packets (69000 bytes) sent in 0.000591 seconds
Rated: 116751269.0 Bps, 934.01 Mbps, 302876.48 pps
Statistics for network device: veth0
Successful packets: 179
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
=================================================================
==440540==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 344 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b734 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0xaaaac3fb2d40 in our_safe_malloc ../../../src/common/utils.c:42
#2 0xaaaac3fb5f50 in create_xsk_socket ../../../src/common/sendpacket.c:1500
#3 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#4 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#5 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#6 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#7 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Direct leak of 48 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b190 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0xffff9f2fabfc in xsk_socket__create_shared (/lib/aarch64-linux-gnu/libxdp.so.1+0xabfc)
#2 0xffff9f2fb280 in xsk_socket__create (/lib/aarch64-linux-gnu/libxdp.so.1+0xb280)
#3 0xaaaac3fb6074 in xsk_configure_socket ../../../src/common/sendpacket.c:1409
#4 0xaaaac3fb6074 in create_xsk_socket ../../../src/common/sendpacket.c:1507
#5 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#6 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#7 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#8 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#9 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#10 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#11 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Direct leak of 20 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b734 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0xaaaac3fb2d40 in our_safe_malloc ../../../src/common/utils.c:42
#2 0xaaaac3fb5f64 in create_xsk_socket ../../../src/common/sendpacket.c:1501
#3 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#4 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#5 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#6 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#7 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Indirect leak of 16777216 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57adf4 in __interceptor_posix_memalign ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
#1 0xaaaac3fb5da8 in create_umem_area ../../../src/common/sendpacket.c:1478
#2 0xaaaac3fb6d0c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1432
#3 0xaaaac3fb6d0c in sendpacket_open ../../../src/common/sendpacket.c:578
#4 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#5 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#6 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#7 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#8 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Indirect leak of 104 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b190 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0xffff9f2fadbc in xsk_socket__create_shared (/lib/aarch64-linux-gnu/libxdp.so.1+0xadbc)
#2 0xffff9f2fb280 in xsk_socket__create (/lib/aarch64-linux-gnu/libxdp.so.1+0xb280)
#3 0xaaaac3fb6074 in xsk_configure_socket ../../../src/common/sendpacket.c:1409
#4 0xaaaac3fb6074 in create_xsk_socket ../../../src/common/sendpacket.c:1507
#5 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#6 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#7 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#8 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#9 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#10 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#11 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Indirect leak of 80 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b190 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0xffff9f2fa8bc in xsk_umem__create (/lib/aarch64-linux-gnu/libxdp.so.1+0xa8bc)
#2 0xaaaac3fb5de0 in create_umem_area ../../../src/common/sendpacket.c:1484
#3 0xaaaac3fb6d0c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1432
#4 0xaaaac3fb6d0c in sendpacket_open ../../../src/common/sendpacket.c:578
#5 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#6 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#7 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
SUMMARY: AddressSanitizer: 16777812 byte(s) leaked in 6 allocation(s).
System (please complete the following information):
- OS: Debian
- OS version: Bookworm
- Tcpreplay Version: 4.5.2-beta1
Additional context
Add any other context about the problem here.
Address sanitizer sees memory leaks when using AF_XDP (--xdp option).
To Reproduce
Steps to reproduce the behavior:
Expected behavior
no memory leaks detected by ASAN
Screenshots
❯ sudo src/tcpreplay --xdp --no-flow-stats -W -i veth0 ../test/test.pcap
Actual: 179 packets (69000 bytes) sent in 0.000591 seconds
Rated: 116751269.0 Bps, 934.01 Mbps, 302876.48 pps
Statistics for network device: veth0
Successful packets: 179
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
=================================================================
==440540==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 344 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b734 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0xaaaac3fb2d40 in our_safe_malloc ../../../src/common/utils.c:42
#2 0xaaaac3fb5f50 in create_xsk_socket ../../../src/common/sendpacket.c:1500
#3 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#4 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#5 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#6 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#7 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Direct leak of 48 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b190 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0xffff9f2fabfc in xsk_socket__create_shared (/lib/aarch64-linux-gnu/libxdp.so.1+0xabfc)
#2 0xffff9f2fb280 in xsk_socket__create (/lib/aarch64-linux-gnu/libxdp.so.1+0xb280)
#3 0xaaaac3fb6074 in xsk_configure_socket ../../../src/common/sendpacket.c:1409
#4 0xaaaac3fb6074 in create_xsk_socket ../../../src/common/sendpacket.c:1507
#5 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#6 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#7 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#8 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#9 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#10 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#11 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Direct leak of 20 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b734 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0xaaaac3fb2d40 in our_safe_malloc ../../../src/common/utils.c:42
#2 0xaaaac3fb5f64 in create_xsk_socket ../../../src/common/sendpacket.c:1501
#3 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#4 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#5 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#6 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#7 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Indirect leak of 16777216 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57adf4 in __interceptor_posix_memalign ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
#1 0xaaaac3fb5da8 in create_umem_area ../../../src/common/sendpacket.c:1478
#2 0xaaaac3fb6d0c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1432
#3 0xaaaac3fb6d0c in sendpacket_open ../../../src/common/sendpacket.c:578
#4 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#5 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#6 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#7 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#8 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Indirect leak of 104 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b190 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0xffff9f2fadbc in xsk_socket__create_shared (/lib/aarch64-linux-gnu/libxdp.so.1+0xadbc)
#2 0xffff9f2fb280 in xsk_socket__create (/lib/aarch64-linux-gnu/libxdp.so.1+0xb280)
#3 0xaaaac3fb6074 in xsk_configure_socket ../../../src/common/sendpacket.c:1409
#4 0xaaaac3fb6074 in create_xsk_socket ../../../src/common/sendpacket.c:1507
#5 0xaaaac3fb6d2c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1441
#6 0xaaaac3fb6d2c in sendpacket_open ../../../src/common/sendpacket.c:578
#7 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#8 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#9 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#10 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#11 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
Indirect leak of 80 byte(s) in 1 object(s) allocated from:
#0 0xffff9f57b190 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0xffff9f2fa8bc in xsk_umem__create (/lib/aarch64-linux-gnu/libxdp.so.1+0xa8bc)
#2 0xaaaac3fb5de0 in create_umem_area ../../../src/common/sendpacket.c:1484
#3 0xaaaac3fb6d0c in sendpacket_open_xsk ../../../src/common/sendpacket.c:1432
#4 0xaaaac3fb6d0c in sendpacket_open ../../../src/common/sendpacket.c:578
#5 0xaaaac3faa1a4 in tcpreplay_post_args ../../src/tcpreplay_api.c:385
#6 0xaaaac3fa5e7c in main ../../src/tcpreplay.c:71
#7 0xffff9f0b773c in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0xffff9f0b7814 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0xaaaac3f9e42c in _start (/home/fklassen/git/tcpreplay/build/src/tcpreplay+0xe42c)
SUMMARY: AddressSanitizer: 16777812 byte(s) leaked in 6 allocation(s).
System (please complete the following information):
Additional context
Add any other context about the problem here.