bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexei Starovoitov <alexei.starovoitov@gmail.com>
To: Yonghong Song <yhs@fb.com>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
	Jiri Olsa <jolsa@kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
	Song Liu <songliubraving@fb.com>, Martin KaFai Lau <kafai@fb.com>,
	David Miller <davem@redhat.com>,
	John Fastabend <john.fastabend@gmail.com>,
	Wenbo Zhang <ethercflow@gmail.com>,
	KP Singh <kpsingh@chromium.org>, Andrii Nakryiko <andriin@fb.com>,
	Brendan Gregg <bgregg@netflix.com>,
	Florent Revest <revest@chromium.org>,
	Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: [PATCH v4 bpf-next 05/14] bpf: Remove btf_id helpers resolving
Date: Sun, 28 Jun 2020 11:50:46 -0700	[thread overview]
Message-ID: <20200628185046.vryhuc23f6yu5fy4@ast-mbp.dhcp.thefacebook.com> (raw)
In-Reply-To: <b9258020-cd38-b818-e3a9-4f6d9cdf6b88@fb.com>

On Fri, Jun 26, 2020 at 04:29:23PM -0700, Yonghong Song wrote:
> > > > 
> > > > -int btf_resolve_helper_id(struct bpf_verifier_log *log,
> > > > -                       const struct bpf_func_proto *fn, int arg)
> > > > -{
> > > > -     int *btf_id = &fn->btf_id[arg];
> > > > -     int ret;
> > > > -
> > > > -     if (fn->arg_type[arg] != ARG_PTR_TO_BTF_ID)
> > > > +     if (!id || id > btf_vmlinux->nr_types)
> > > >                return -EINVAL;
> > > 
> > > id == 0 if btf_id cannot be resolved by resolve_btfids, right?
> > > when id may be greater than btf_vmlinux->nr_types? If resolve_btfids
> > > application did incorrect transformation?
> > > 
> > > Anyway, this is to resolve helper meta btf_id. Even if you
> > > return a btf_id > btf_vmlinux->nr_types, verifier will reject
> > > since it will never be the same as the real parameter btf_id.
> > > I would drop id > btf_vmlinux->nr_types here. This should never
> > > happen for a correct tool. Even if it does, verifier will take
> > > care of it.
> > > 
> > 
> > I'd love to hear Alexei's thoughts about this change as well. Jiri
> > removed not just BTF ID resolution, but also all the sanity checks.
> > This now means more trust in helper definitions to not screw up
> > anything. It's probably OK, but still something to consciously think
> > about.
> 
> The kernel will have to trust the result. 

+1
I think 'if (!id || id > btf_vmlinux->nr_types)' at run-time and
other sanity checks I saw in other patches are unnecessary.
resolve_btfids should do all checks and fail vmlinux linking.
We trust gcc to generate correct assembly code in the first place
and correct dwarf. We trust pahole do correct BTF conversion from
dwarf and dedup. We should trust resolve_btfids.
It's imo the simplest tool comparing to gcc.
btf_parse_vmlinux() is doing basic sanity check of BTF mainly
to populate 'struct btf *btf_vmlinux;' for further use.
I think we can add a scan over resolved btfids to btf_parse_vmlinux()
to make sure that all ids are within the range, but I don't think
it's mandatory for this patch set. Would be a reasonable sanity
check for the future. Of course, checking for sorted set_start/end
is overkill. Basic simplest sanity is ok.

  reply	other threads:[~2020-06-28 18:50 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-25 22:12 [PATCH v4 bpf-next 00/14] bpf: Add d_path helper Jiri Olsa
2020-06-25 22:12 ` [PATCH v4 bpf-next 01/14] bpf: Add resolve_btfids tool to resolve BTF IDs in ELF object Jiri Olsa
2020-06-26 20:53   ` Andrii Nakryiko
2020-06-26 21:09   ` Yonghong Song
2020-06-28 19:09     ` Alexei Starovoitov
2020-06-28 19:35       ` Jiri Olsa
2020-06-28 20:53         ` Yonghong Song
2020-06-25 22:12 ` [PATCH v4 bpf-next 02/14] bpf: Compile resolve_btfids tool at kernel compilation start Jiri Olsa
2020-06-26 21:28   ` Andrii Nakryiko
2020-06-28 19:48     ` Jiri Olsa
2020-06-25 22:12 ` [PATCH v4 bpf-next 03/14] bpf: Add BTF_ID_LIST/BTF_ID macros Jiri Olsa
2020-06-26 21:32   ` Andrii Nakryiko
2020-06-28 19:50     ` Jiri Olsa
2020-06-25 22:12 ` [PATCH v4 bpf-next 04/14] bpf: Resolve BTF IDs in vmlinux image Jiri Olsa
2020-06-26 21:34   ` Andrii Nakryiko
2020-06-25 22:12 ` [PATCH v4 bpf-next 05/14] bpf: Remove btf_id helpers resolving Jiri Olsa
2020-06-26 21:36   ` Yonghong Song
2020-06-26 21:40     ` Andrii Nakryiko
2020-06-26 23:29       ` Yonghong Song
2020-06-28 18:50         ` Alexei Starovoitov [this message]
2020-06-28 20:00           ` Andrii Nakryiko
2020-06-28 20:16     ` Jiri Olsa
2020-06-28 20:59       ` Yonghong Song
2020-06-28 21:20         ` Jiri Olsa
2020-06-25 22:12 ` [PATCH v4 bpf-next 06/14] bpf: Use BTF_ID to resolve bpf_ctx_convert struct Jiri Olsa
2020-06-26 21:44   ` Andrii Nakryiko
2020-06-26 21:44   ` Yonghong Song
2020-06-28 19:52     ` Jiri Olsa
2020-06-25 22:12 ` [PATCH v4 bpf-next 07/14] bpf: Allow nested BTF object to be refferenced by BTF object + offset Jiri Olsa
2020-06-30  1:52   ` Andrii Nakryiko
2020-06-30 13:54     ` Jiri Olsa
2020-06-30 20:05   ` Andrii Nakryiko
2020-06-30 20:07     ` Andrii Nakryiko
2020-07-02 10:08     ` Jiri Olsa
2020-07-06 23:15       ` Andrii Nakryiko
2020-06-25 22:12 ` [PATCH v4 bpf-next 08/14] bpf: Add BTF_SET_START/END macros Jiri Olsa
2020-06-26 21:49   ` Andrii Nakryiko
2020-06-25 22:12 ` [PATCH v4 bpf-next 09/14] bpf: Add info about .BTF.ids section to btf.rst Jiri Olsa
2020-06-25 22:13 ` [PATCH v4 bpf-next 10/14] bpf: Add d_path helper Jiri Olsa
2020-06-26 20:38   ` Andrii Nakryiko
2020-06-28 19:42     ` Jiri Olsa
2020-07-16 23:13       ` KP Singh
2020-07-17  8:28         ` Jiri Olsa
2020-06-25 22:13 ` [PATCH v4 bpf-next 11/14] tools headers: Adopt verbatim copy of btf_ids.h from kernel sources Jiri Olsa
2020-06-26 21:51   ` Andrii Nakryiko
2020-06-25 22:13 ` [PATCH v4 bpf-next 12/14] selftests/bpf: Add verifier test for d_path helper Jiri Olsa
2020-06-30  1:30   ` Andrii Nakryiko
2020-06-25 22:13 ` [PATCH v4 bpf-next 13/14] selftests/bpf: Add " Jiri Olsa
2020-06-26 21:55   ` Andrii Nakryiko
2020-06-28 19:55     ` Jiri Olsa
2020-06-25 22:13 ` [PATCH v4 bpf-next 14/14] selftests/bpf: Add test for resolve_btfids Jiri Olsa
2020-06-30  1:43   ` Andrii Nakryiko
2020-06-30 14:27     ` Jiri Olsa
2020-06-30 18:13       ` Andrii Nakryiko
2020-06-30  1:54 ` [PATCH v4 bpf-next 00/14] bpf: Add d_path helper Andrii Nakryiko
2020-06-30 13:55   ` Jiri Olsa

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=20200628185046.vryhuc23f6yu5fy4@ast-mbp.dhcp.thefacebook.com \
    --to=alexei.starovoitov@gmail.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andriin@fb.com \
    --cc=ast@kernel.org \
    --cc=bgregg@netflix.com \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@redhat.com \
    --cc=ethercflow@gmail.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kafai@fb.com \
    --cc=kpsingh@chromium.org \
    --cc=netdev@vger.kernel.org \
    --cc=revest@chromium.org \
    --cc=songliubraving@fb.com \
    --cc=viro@zeniv.linux.org.uk \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).