On Wed, Apr 6, 2022 at 7:38 PM Haowen Bai <baihaowen@xxxxxxxxx> wrote: > > link could be null but still dereference bpf_link__destroy(&link->link) > and it will lead to a null pointer access. > > Signed-off-by: Haowen Bai <baihaowen@xxxxxxxxx> > --- > tools/lib/bpf/usdt.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/lib/bpf/usdt.c b/tools/lib/bpf/usdt.c > index 1bce2eab5e89..b02ebc4ba57c 100644 > --- a/tools/lib/bpf/usdt.c > +++ b/tools/lib/bpf/usdt.c > @@ -996,7 +996,7 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct > link = calloc(1, sizeof(*link)); > if (!link) { > err = -ENOMEM; > - goto err_out; > + goto link_err; this is not a complete fix because there are two more similar goto err_out; above which you didn't fix. I think better fix is to just add if (link) check before bpf_link__destroy(), which is what I did locally when applying. > } > > link->usdt_man = man; > @@ -1072,7 +1072,7 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct > > err_out: > bpf_link__destroy(&link->link); > - > +link_err: > free(targets); > hashmap__free(specs_hash); > if (elf) > -- > 2.7.4 >