From: Carlos Antonio Neira Bustos <cneirabustos@gmail.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Yonghong Song <yhs@fb.com>, Networking <netdev@vger.kernel.org>,
"ebiederm@xmission.com" <ebiederm@xmission.com>,
Jesper Dangaard Brouer <brouer@redhat.com>,
bpf <bpf@vger.kernel.org>
Subject: Re: [PATCH bpf-next v11 2/4] bpf: added new helper bpf_get_ns_current_pid_tgid
Date: Fri, 27 Sep 2019 22:42:54 -0300 [thread overview]
Message-ID: <20190928014254.GA26129@frodo.byteswizards.com> (raw)
In-Reply-To: <CAEf4BzYZGh774nS1EaCP4od9gzWqPtePPAGX6J7O+pEosnuYrQ@mail.gmail.com>
On Fri, Sep 27, 2019 at 10:24:46AM -0700, Andrii Nakryiko wrote:
> On Fri, Sep 27, 2019 at 9:59 AM Yonghong Song <yhs@fb.com> wrote:
> >
> >
> >
> > On 9/27/19 9:15 AM, Andrii Nakryiko wrote:
> > > On Thu, Sep 26, 2019 at 1:15 AM Carlos Neira <cneirabustos@gmail.com> wrote:
> > >>
> > >> New bpf helper bpf_get_ns_current_pid_tgid,
> > >> This helper will return pid and tgid from current task
> > >> which namespace matches dev_t and inode number provided,
> > >> this will allows us to instrument a process inside a container.
> > >>
> > >> Signed-off-by: Carlos Neira <cneirabustos@gmail.com>
> > >> ---
> > >> include/linux/bpf.h | 1 +
> > >> include/uapi/linux/bpf.h | 18 +++++++++++++++++-
> > >> kernel/bpf/core.c | 1 +
> > >> kernel/bpf/helpers.c | 32 ++++++++++++++++++++++++++++++++
> > >> kernel/trace/bpf_trace.c | 2 ++
> > >> 5 files changed, 53 insertions(+), 1 deletion(-)
> > >>
> > >> diff --git a/include/linux/bpf.h b/include/linux/bpf.h
> > >> index 5b9d22338606..231001475504 100644
> > >> --- a/include/linux/bpf.h
> > >> +++ b/include/linux/bpf.h
> > >> @@ -1055,6 +1055,7 @@ extern const struct bpf_func_proto bpf_get_local_storage_proto;
> > >> extern const struct bpf_func_proto bpf_strtol_proto;
> > >> extern const struct bpf_func_proto bpf_strtoul_proto;
> > >> extern const struct bpf_func_proto bpf_tcp_sock_proto;
> > >> +extern const struct bpf_func_proto bpf_get_ns_current_pid_tgid_proto;
> > >>
> > >> /* Shared helpers among cBPF and eBPF. */
> > >> void bpf_user_rnd_init_once(void);
> > >> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
> > >> index 77c6be96d676..9272dc8fb08c 100644
> > >> --- a/include/uapi/linux/bpf.h
> > >> +++ b/include/uapi/linux/bpf.h
> > >> @@ -2750,6 +2750,21 @@ union bpf_attr {
> > >> * **-EOPNOTSUPP** kernel configuration does not enable SYN cookies
> > >> *
> > >> * **-EPROTONOSUPPORT** IP packet version is not 4 or 6
> > >> + *
> > >> + * int bpf_get_ns_current_pid_tgid(u32 dev, u64 inum)
> > >> + * Return
> > >> + * A 64-bit integer containing the current tgid and pid from current task
> > >
> > > Function signature doesn't correspond to the actual return type (int vs u64).
> > >
> > >> + * which namespace inode and dev_t matches , and is create as such:
> > >> + * *current_task*\ **->tgid << 32 \|**
> > >> + * *current_task*\ **->pid**.
> > >> + *
> > >> + * On failure, the returned value is one of the following:
> > >> + *
> > >> + * **-EINVAL** if dev and inum supplied don't match dev_t and inode number
> > >> + * with nsfs of current task.
> > >> + *
> > >> + * **-ENOENT** if /proc/self/ns does not exists.
> > >> + *
> > >> */
> > >
> > > [...]
> > >
> > >> #include "../../lib/kstrtox.h"
> > >>
> > >> @@ -487,3 +489,33 @@ const struct bpf_func_proto bpf_strtoul_proto = {
> > >> .arg4_type = ARG_PTR_TO_LONG,
> > >> };
> > >> #endif
> > >> +
> > >> +BPF_CALL_2(bpf_get_ns_current_pid_tgid, u32, dev, u64, inum)
> > >
> > > Just curious, is dev_t officially specified as u32 and is never
> > > supposed to grow bigger? I wonder if accepting u64 might be more
> > > future-proof API here?
> >
> > This is what we have now in kernel (include/linux/types.h)
> > typedef u32 __kernel_dev_t;
> > typedef __kernel_dev_t dev_t;
> >
> > But userspace dev_t (defined at /usr/include/sys/types.h) have
> > 8 bytes.
> >
> > Agree. Let us just use u64. It won't hurt and also will be fine
> > if kernel internal dev_t becomes 64bit.
>
> Sounds good. Let's not forget to check that conversion to dev_t
> doesn't loose high bits, something like:
>
> if ((u64)(dev_t)dev != dev)
> return -E<something>;
>
> >
> > >
> > >> +{
> > >> + struct task_struct *task = current;
> > >> + struct pid_namespace *pidns;
> > >
> > > [...]
> > >
Thanks Yonghong and Andrii,
I'll include these fixes on V12, I'll work on this over the weekend.
Bests
next prev parent reply other threads:[~2019-09-28 1:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-24 15:20 [PATCH V11 0/4] BPF: New helper to obtain namespace data from current task Carlos Neira
2019-09-24 15:20 ` [PATCH bpf-next v11 1/4] fs/nsfs.c: added ns_match Carlos Neira
2019-09-24 15:20 ` [PATCH bpf-next v11 2/4] bpf: added new helper bpf_get_ns_current_pid_tgid Carlos Neira
2019-09-27 16:15 ` Andrii Nakryiko
2019-09-27 16:59 ` Yonghong Song
2019-09-27 17:24 ` Andrii Nakryiko
2019-09-28 1:42 ` Carlos Antonio Neira Bustos [this message]
2019-09-24 15:20 ` [PATCH bpf-next v11 3/4] tools: Added bpf_get_ns_current_pid_tgid helper Carlos Neira
2019-09-25 3:27 ` Yonghong Song
2019-09-24 15:20 ` [PATCH bpf-next v11 4/4] tools/testing/selftests/bpf: Add self-tests for new helper Carlos Neira
2019-09-25 16:07 ` Yonghong Song
2019-09-25 20:33 ` Carlos Antonio Neira Bustos
2019-09-24 18:01 ` [PATCH V11 0/4] BPF: New helper to obtain namespace data from current task Daniel Borkmann
2019-09-24 18:14 ` Carlos Antonio Neira Bustos
2019-09-26 0:59 ` Eric W. Biederman
2019-09-26 15:51 ` Yonghong Song
2019-09-26 16:16 ` John Fastabend
2019-09-26 17:01 ` Yonghong Song
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=20190928014254.GA26129@frodo.byteswizards.com \
--to=cneirabustos@gmail.com \
--cc=andrii.nakryiko@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=brouer@redhat.com \
--cc=ebiederm@xmission.com \
--cc=netdev@vger.kernel.org \
--cc=yhs@fb.com \
/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.