diff --git a/libbpf-tools/trace_helpers.c b/libbpf-tools/trace_helpers.c index 536ed8349d90..567d11e672a5 100644 --- a/libbpf-tools/trace_helpers.c +++ b/libbpf-tools/trace_helpers.c @@ -491,6 +491,20 @@ static void dso__free_fields(struct dso *dso) free(dso->ranges); free(dso->syms); btf__free(dso->btf); + + /* Clear relevant fields in dso to avoid dangling pointers. */ + dso->name = NULL; + dso->ranges = NULL; + dso->range_sz = 0; + dso->syms = NULL; + dso->btf = NULL; + + /* Zero out size/capacity to avoid stale bounds/alloc decisions. */ + dso->syms_sz = 0; + dso->syms_cap = 0; + dso->type = UNKNOWN; + dso->sh_addr = 0; + dso->sh_offset = 0; } static int dso__load_sym_table_from_elf(struct dso *dso, int fd)