All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <olsajiri@gmail.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Andrii Nakryiko <andrii.nakryiko@gmail.com>,
	linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	bpf@vger.kernel.org
Subject: Re: [PATCH tip/perf/core] bpf: fix use-after-free in bpf_uprobe_multi_link_attach()
Date: Wed, 14 Aug 2024 09:05:03 +0200	[thread overview]
Message-ID: <ZrxXH5BX5bn3cVBB@krava> (raw)
In-Reply-To: <20240813152524.GA7292@redhat.com>

On Tue, Aug 13, 2024 at 05:25:24PM +0200, Oleg Nesterov wrote:
> If bpf_link_prime() fails, bpf_uprobe_multi_link_attach() goes to the
> error_free label and frees the array of bpf_uprobe's without calling
> bpf_uprobe_unregister().
> 
> This leaks bpf_uprobe->uprobe and worse, this frees bpf_uprobe->consumer
> without removing it from the uprobe->consumers list.
> 
> Cc: stable@vger.kernel.org
> Fixes: 89ae89f53d20 ("bpf: Add multi uprobe link")
> Reported-by: syzbot+f7a1c2c2711e4a780f19@syzkaller.appspotmail.com
> Closes: https://lore.kernel.org/all/000000000000382d39061f59f2dd@google.com/
> Tested-by: syzbot+f7a1c2c2711e4a780f19@syzkaller.appspotmail.com
> Acked-by: Andrii Nakryiko <andrii@kernel.org>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>

thanks for fixing this

Acked-by: Jiri Olsa <jolsa@kernel.org>

jirka

> ---
>  kernel/trace/bpf_trace.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
> index 4e391daafa64..90cd30e9723e 100644
> --- a/kernel/trace/bpf_trace.c
> +++ b/kernel/trace/bpf_trace.c
> @@ -3484,17 +3484,20 @@ int bpf_uprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr
>  						    &uprobes[i].consumer);
>  		if (IS_ERR(uprobes[i].uprobe)) {
>  			err = PTR_ERR(uprobes[i].uprobe);
> -			bpf_uprobe_unregister(uprobes, i);
> -			goto error_free;
> +			link->cnt = i;
> +			goto error_unregister;
>  		}
>  	}
>  
>  	err = bpf_link_prime(&link->link, &link_primer);
>  	if (err)
> -		goto error_free;
> +		goto error_unregister;
>  
>  	return bpf_link_settle(&link_primer);
>  
> +error_unregister:
> +	bpf_uprobe_unregister(uprobes, link->cnt);
> +
>  error_free:
>  	kvfree(uprobes);
>  	kfree(link);
> -- 
> 2.25.1.362.g51ebf55
> 
> 

  reply	other threads:[~2024-08-14  7:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-13 15:25 [PATCH tip/perf/core] bpf: fix use-after-free in bpf_uprobe_multi_link_attach() Oleg Nesterov
2024-08-14  7:05 ` Jiri Olsa [this message]
2024-09-05 15:03 ` [tip: perf/core] bpf: Fix " tip-bot2 for Oleg Nesterov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZrxXH5BX5bn3cVBB@krava \
    --to=olsajiri@gmail.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=bpf@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.