From 8112069be0aed99cc56777800481303d4f613550 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Fri, 17 Oct 2025 11:13:00 +0100 Subject: [PATCH] bpf: do not leak dlopen object CID#1609833 --- src/shared/bpf-dlopen.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/shared/bpf-dlopen.c b/src/shared/bpf-dlopen.c index e84b435f48..1c64498044 100644 --- a/src/shared/bpf-dlopen.c +++ b/src/shared/bpf-dlopen.c @@ -49,6 +49,8 @@ DLSYM_PROTOTYPE(ring_buffer__free) = NULL; DLSYM_PROTOTYPE(ring_buffer__new) = NULL; DLSYM_PROTOTYPE(ring_buffer__poll) = NULL; +static void* bpf_dl = NULL; + /* new symbols available from libbpf 0.7.0 */ int (*sym_bpf_map_create)(enum bpf_map_type, const char *, __u32, __u32, __u32, const struct bpf_map_create_opts *); struct bpf_map* (*sym_bpf_object__next_map)(const struct bpf_object *obj, const struct bpf_map *map); @@ -71,8 +73,8 @@ static int bpf_print_func(enum libbpf_print_level level, const char *fmt, va_lis } int dlopen_bpf_full(int log_level) { + _cleanup_(dlclosep) void *dl = NULL; static int cached = 0; - void *dl; int r; if (cached != 0) @@ -177,6 +179,8 @@ int dlopen_bpf_full(int log_level) { REENABLE_WARNING; + bpf_dl = TAKE_PTR(dl); + return cached = true; }