On Thu, Sep 12, 2024 at 09:28:45AM +0800, Hou Tao wrote: > From: Hou Tao <houtao1@xxxxxxxxxx> > > Call the missed kfree() in btf_parse_struct_metas() when there is no > special field in btf, otherwise will get the following kmemleak report: > > unreferenced object 0xffff888101033620 (size 8): > comm "test_progs", pid 604, jiffies 4295127011 > ...... > backtrace (crc e77dc444): > [<00000000186f90f3>] kmemleak_alloc+0x4b/0x80 > [<00000000ac8e9c4d>] __kmalloc_cache_noprof+0x2a1/0x310 > [<00000000d99d68d6>] btf_new_fd+0x72d/0xe90 > [<00000000f010b7f8>] __sys_bpf+0xec3/0x2410 > [<00000000e077ed6f>] __x64_sys_bpf+0x1f/0x30 > [<00000000a12f9e55>] x64_sys_call+0x199/0x9f0 > [<00000000f3029ea6>] do_syscall_64+0x3b/0xc0 > [<000000005640913a>] entry_SYSCALL_64_after_hwframe+0x4b/0x53 > > Fixes: 7a851ecb1806 ("bpf: Search for kptrs in prog BTF structs") > Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx> > --- > kernel/bpf/btf.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c > index 59b4f7265761..31eae516f701 100644 > --- a/kernel/bpf/btf.c > +++ b/kernel/bpf/btf.c > @@ -5572,8 +5572,10 @@ btf_parse_struct_metas(struct bpf_verifier_log *log, struct btf *btf) > aof->ids[aof->cnt++] = i; > } I was wondering we could get away without the initial kmalloc and let the first krealoc do the first allocation, but it might need some other extra checks, so not sure it's worth it in any case this lgtm Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx> jirka > > - if (!aof->cnt) > + if (!aof->cnt) { > + kfree(aof); > return NULL; > + } > sort(&aof->ids, aof->cnt, sizeof(aof->ids[0]), btf_id_cmp_func, NULL); > > for (i = 1; i < n; i++) { > -- > 2.29.2 >