* [PATCH v3 1/1] bpf: Drop unprotected find_vpid() in favour of find_get_pid()
@ 2022-08-09 13:47 Lee Jones
2022-09-08 7:35 ` Lee Jones
0 siblings, 1 reply; 3+ messages in thread
From: Lee Jones @ 2022-08-09 13:47 UTC (permalink / raw)
To: lee
Cc: linux-kernel, Alexei Starovoitov, Daniel Borkmann, John Fastabend,
Andrii Nakryiko, Martin KaFai Lau, Song Liu, Yonghong Song,
KP Singh, Stanislav Fomichev, Hao Luo, bpf, Jiri Olsa
The documentation for find_vpid() clearly states:
"Must be called with the tasklist_lock or rcu_read_lock() held."
Presently we do neither.
Let's use find_get_pid() which searches for the vpid, then takes a
reference to it preventing early free, all within the safety of
rcu_read_lock(). Once we have our reference we can safely make use of
it up until the point it is put.
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Martin KaFai Lau <martin.lau@linux.dev>
Cc: Song Liu <song@kernel.org>
Cc: Yonghong Song <yhs@fb.com>
Cc: KP Singh <kpsingh@kernel.org>
Cc: Stanislav Fomichev <sdf@google.com>
Cc: Hao Luo <haoluo@google.com>
Cc: bpf@vger.kernel.org
Fixes: 41bdc4b40ed6f ("bpf: introduce bpf subcommand BPF_TASK_FD_QUERY")
Acked-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Lee Jones <lee@kernel.org>
---
v1 => v2:
* Commit log update - description - no code differences
v2 => v3:
* Commit log update - spelling of find_vpid() - no code differences
kernel/bpf/syscall.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 83c7136c5788d..c20cff30581c4 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -4385,6 +4385,7 @@ static int bpf_task_fd_query(const union bpf_attr *attr,
const struct perf_event *event;
struct task_struct *task;
struct file *file;
+ struct pid *ppid;
int err;
if (CHECK_ATTR(BPF_TASK_FD_QUERY))
@@ -4396,7 +4397,9 @@ static int bpf_task_fd_query(const union bpf_attr *attr,
if (attr->task_fd_query.flags != 0)
return -EINVAL;
- task = get_pid_task(find_vpid(pid), PIDTYPE_PID);
+ ppid = find_get_pid(pid);
+ task = get_pid_task(ppid, PIDTYPE_PID);
+ put_pid(ppid);
if (!task)
return -ENOENT;
--
2.37.1.559.g78731f0fdb-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3 1/1] bpf: Drop unprotected find_vpid() in favour of find_get_pid()
2022-08-09 13:47 [PATCH v3 1/1] bpf: Drop unprotected find_vpid() in favour of find_get_pid() Lee Jones
@ 2022-09-08 7:35 ` Lee Jones
2022-09-08 7:37 ` Lee Jones
0 siblings, 1 reply; 3+ messages in thread
From: Lee Jones @ 2022-09-08 7:35 UTC (permalink / raw)
To: linux-kernel, Alexei Starovoitov, Daniel Borkmann, John Fastabend,
Andrii Nakryiko, Martin KaFai Lau, Song Liu, Yonghong Song,
KP Singh, Stanislav Fomichev, Hao Luo, bpf, Jiri Olsa
On Tue, 09 Aug 2022, Lee Jones wrote:
> The documentation for find_vpid() clearly states:
>
> "Must be called with the tasklist_lock or rcu_read_lock() held."
>
> Presently we do neither.
>
> Let's use find_get_pid() which searches for the vpid, then takes a
> reference to it preventing early free, all within the safety of
> rcu_read_lock(). Once we have our reference we can safely make use of
> it up until the point it is put.
>
> Cc: Alexei Starovoitov <ast@kernel.org>
> Cc: Daniel Borkmann <daniel@iogearbox.net>
> Cc: John Fastabend <john.fastabend@gmail.com>
> Cc: Andrii Nakryiko <andrii@kernel.org>
> Cc: Martin KaFai Lau <martin.lau@linux.dev>
> Cc: Song Liu <song@kernel.org>
> Cc: Yonghong Song <yhs@fb.com>
> Cc: KP Singh <kpsingh@kernel.org>
> Cc: Stanislav Fomichev <sdf@google.com>
> Cc: Hao Luo <haoluo@google.com>
> Cc: bpf@vger.kernel.org
> Fixes: 41bdc4b40ed6f ("bpf: introduce bpf subcommand BPF_TASK_FD_QUERY")
> Acked-by: Jiri Olsa <jolsa@kernel.org>
> Signed-off-by: Lee Jones <lee@kernel.org>
> ---
>
> v1 => v2:
> * Commit log update - description - no code differences
>
> v2 => v3:
> * Commit log update - spelling of find_vpid() - no code differences
Did anyone get a chance to look at this please?
Would you like a [RESEND]?
> kernel/bpf/syscall.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
> index 83c7136c5788d..c20cff30581c4 100644
> --- a/kernel/bpf/syscall.c
> +++ b/kernel/bpf/syscall.c
> @@ -4385,6 +4385,7 @@ static int bpf_task_fd_query(const union bpf_attr *attr,
> const struct perf_event *event;
> struct task_struct *task;
> struct file *file;
> + struct pid *ppid;
> int err;
>
> if (CHECK_ATTR(BPF_TASK_FD_QUERY))
> @@ -4396,7 +4397,9 @@ static int bpf_task_fd_query(const union bpf_attr *attr,
> if (attr->task_fd_query.flags != 0)
> return -EINVAL;
>
> - task = get_pid_task(find_vpid(pid), PIDTYPE_PID);
> + ppid = find_get_pid(pid);
> + task = get_pid_task(ppid, PIDTYPE_PID);
> + put_pid(ppid);
> if (!task)
> return -ENOENT;
>
--
Lee Jones [李琼斯]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3 1/1] bpf: Drop unprotected find_vpid() in favour of find_get_pid()
2022-09-08 7:35 ` Lee Jones
@ 2022-09-08 7:37 ` Lee Jones
0 siblings, 0 replies; 3+ messages in thread
From: Lee Jones @ 2022-09-08 7:37 UTC (permalink / raw)
To: linux-kernel, Alexei Starovoitov, Daniel Borkmann, John Fastabend,
Andrii Nakryiko, Martin KaFai Lau, Song Liu, Yonghong Song,
KP Singh, Stanislav Fomichev, Hao Luo, bpf, Jiri Olsa
On Thu, 08 Sep 2022, Lee Jones wrote:
> On Tue, 09 Aug 2022, Lee Jones wrote:
>
> > The documentation for find_vpid() clearly states:
> >
> > "Must be called with the tasklist_lock or rcu_read_lock() held."
> >
> > Presently we do neither.
> >
> > Let's use find_get_pid() which searches for the vpid, then takes a
> > reference to it preventing early free, all within the safety of
> > rcu_read_lock(). Once we have our reference we can safely make use of
> > it up until the point it is put.
> >
> > Cc: Alexei Starovoitov <ast@kernel.org>
> > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > Cc: John Fastabend <john.fastabend@gmail.com>
> > Cc: Andrii Nakryiko <andrii@kernel.org>
> > Cc: Martin KaFai Lau <martin.lau@linux.dev>
> > Cc: Song Liu <song@kernel.org>
> > Cc: Yonghong Song <yhs@fb.com>
> > Cc: KP Singh <kpsingh@kernel.org>
> > Cc: Stanislav Fomichev <sdf@google.com>
> > Cc: Hao Luo <haoluo@google.com>
> > Cc: bpf@vger.kernel.org
> > Fixes: 41bdc4b40ed6f ("bpf: introduce bpf subcommand BPF_TASK_FD_QUERY")
> > Acked-by: Jiri Olsa <jolsa@kernel.org>
> > Signed-off-by: Lee Jones <lee@kernel.org>
> > ---
> >
> > v1 => v2:
> > * Commit log update - description - no code differences
> >
> > v2 => v3:
> > * Commit log update - spelling of find_vpid() - no code differences
>
> Did anyone get a chance to look at this please?
>
> Would you like a [RESEND]?
Scrap that. I've just seen the last replies to v2.
Leave it with me.
--
Lee Jones [李琼斯]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-09-08 7:37 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-09 13:47 [PATCH v3 1/1] bpf: Drop unprotected find_vpid() in favour of find_get_pid() Lee Jones
2022-09-08 7:35 ` Lee Jones
2022-09-08 7:37 ` Lee Jones
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox