From: Luca Boccassi Date: Fri, 17 Oct 2025 10:13:00 +0000 (+0100) Subject: bpf: do not leak dlopen object X-Git-Tag: v258.2~72 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b80d4387fadfb7e8c6600bc07e6bbb62d97f6e12;p=thirdparty%2Fsystemd.git bpf: do not leak dlopen object CID#1609833 (cherry picked from commit 8112069be0aed99cc56777800481303d4f613550) --- diff --git a/src/shared/bpf-dlopen.c b/src/shared/bpf-dlopen.c index e84b435f488..1c64498044a 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; }