Skip to content

[Bug] AF_XDP memory leak #935

@fklassen

Description

@fklassen

Address sanitizer sees memory leaks when using AF_XDP (--xdp option).

To Reproduce
Steps to reproduce the behavior:

  1. ./configure --enable-asan
  2. make
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions