From: Andrii Nakryiko <andrii.nakryiko@gmail.com> To: Yang Jihong <yangjihong1@huawei.com> Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, jolsa@kernel.org, illusionist.neo@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, mykolal@fb.com, shuah@kernel.org, benjamin.tissoires@redhat.com, memxor@gmail.com, asavkov@redhat.com, delyank@fb.com, bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH bpf v2 3/5] libbpf: Skip adjust mem size for load pointer in 32-bit arch in CO_RE Date: Mon, 7 Nov 2022 17:22:30 -0800 [thread overview] Message-ID: <CAEf4BzZd+hzeRhLD6DaDVx67fySd+KaTP6eOJid-u9mqnQwigg@mail.gmail.com> (raw) In-Reply-To: <20221107092032.178235-4-yangjihong1@huawei.com> On Mon, Nov 7, 2022 at 1:23 AM Yang Jihong <yangjihong1@huawei.com> wrote: > > bpf_core_patch_insn modifies load's mem size from 8 bytes to 4 bytes. > As a result, the bpf check fails, we need to skip adjust mem size to fit > the verifier. > > Signed-off-by: Yang Jihong <yangjihong1@huawei.com> > --- > tools/lib/bpf/libbpf.c | 34 +++++++++++++++++++++++++++++----- > 1 file changed, 29 insertions(+), 5 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 184ce1684dcd..e1c21b631a0b 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -5634,6 +5634,28 @@ static int bpf_core_resolve_relo(struct bpf_program *prog, > targ_res); > } > > +static bool > +bpf_core_patch_insn_skip(const struct btf *local_btf, const struct bpf_insn *insn, > + const struct bpf_core_relo_res *res) > +{ > + __u8 class; > + const struct btf_type *orig_t; > + > + class = BPF_CLASS(insn->code); > + orig_t = btf_type_by_id(local_btf, res->orig_type_id); > + > + /* > + * verifier has to see a load of a pointer as a 8-byte load, > + * CO_RE should not screws up access, bpf_core_patch_insn modifies > + * load's mem size from 8 bytes to 4 bytes in 32-bit arch, > + * so we skip adjust mem size. > + */ Nope, this is only for BPF UAPI context types like __sk_buff (right now). fentry/fexit/raw_tp_btf programs traversing kernel types and following pointers actually need this to work correctly. Don't do this. > + if (class == BPF_LDX && btf_is_ptr(orig_t)) > + return true; > + > + return false; > +} > + > static int > bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path) > { > @@ -5730,11 +5752,13 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path) > goto out; > } > > - err = bpf_core_patch_insn(prog->name, insn, insn_idx, rec, i, &targ_res); > - if (err) { > - pr_warn("prog '%s': relo #%d: failed to patch insn #%u: %d\n", > - prog->name, i, insn_idx, err); > - goto out; > + if (!bpf_core_patch_insn_skip(obj->btf, insn, &targ_res)) { > + err = bpf_core_patch_insn(prog->name, insn, insn_idx, rec, i, &targ_res); > + if (err) { > + pr_warn("prog '%s': relo #%d: failed to patch insn #%u: %d\n", > + prog->name, i, insn_idx, err); > + goto out; > + } > } > } > } > -- > 2.30.GIT >
WARNING: multiple messages have this Message-ID (diff)
From: Andrii Nakryiko <andrii.nakryiko@gmail.com> To: Yang Jihong <yangjihong1@huawei.com> Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, jolsa@kernel.org, illusionist.neo@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, mykolal@fb.com, shuah@kernel.org, benjamin.tissoires@redhat.com, memxor@gmail.com, asavkov@redhat.com, delyank@fb.com, bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH bpf v2 3/5] libbpf: Skip adjust mem size for load pointer in 32-bit arch in CO_RE Date: Mon, 7 Nov 2022 17:22:30 -0800 [thread overview] Message-ID: <CAEf4BzZd+hzeRhLD6DaDVx67fySd+KaTP6eOJid-u9mqnQwigg@mail.gmail.com> (raw) In-Reply-To: <20221107092032.178235-4-yangjihong1@huawei.com> On Mon, Nov 7, 2022 at 1:23 AM Yang Jihong <yangjihong1@huawei.com> wrote: > > bpf_core_patch_insn modifies load's mem size from 8 bytes to 4 bytes. > As a result, the bpf check fails, we need to skip adjust mem size to fit > the verifier. > > Signed-off-by: Yang Jihong <yangjihong1@huawei.com> > --- > tools/lib/bpf/libbpf.c | 34 +++++++++++++++++++++++++++++----- > 1 file changed, 29 insertions(+), 5 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 184ce1684dcd..e1c21b631a0b 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -5634,6 +5634,28 @@ static int bpf_core_resolve_relo(struct bpf_program *prog, > targ_res); > } > > +static bool > +bpf_core_patch_insn_skip(const struct btf *local_btf, const struct bpf_insn *insn, > + const struct bpf_core_relo_res *res) > +{ > + __u8 class; > + const struct btf_type *orig_t; > + > + class = BPF_CLASS(insn->code); > + orig_t = btf_type_by_id(local_btf, res->orig_type_id); > + > + /* > + * verifier has to see a load of a pointer as a 8-byte load, > + * CO_RE should not screws up access, bpf_core_patch_insn modifies > + * load's mem size from 8 bytes to 4 bytes in 32-bit arch, > + * so we skip adjust mem size. > + */ Nope, this is only for BPF UAPI context types like __sk_buff (right now). fentry/fexit/raw_tp_btf programs traversing kernel types and following pointers actually need this to work correctly. Don't do this. > + if (class == BPF_LDX && btf_is_ptr(orig_t)) > + return true; > + > + return false; > +} > + > static int > bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path) > { > @@ -5730,11 +5752,13 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path) > goto out; > } > > - err = bpf_core_patch_insn(prog->name, insn, insn_idx, rec, i, &targ_res); > - if (err) { > - pr_warn("prog '%s': relo #%d: failed to patch insn #%u: %d\n", > - prog->name, i, insn_idx, err); > - goto out; > + if (!bpf_core_patch_insn_skip(obj->btf, insn, &targ_res)) { > + err = bpf_core_patch_insn(prog->name, insn, insn_idx, rec, i, &targ_res); > + if (err) { > + pr_warn("prog '%s': relo #%d: failed to patch insn #%u: %d\n", > + prog->name, i, insn_idx, err); > + goto out; > + } > } > } > } > -- > 2.30.GIT > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-11-08 1:22 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-11-07 9:20 [PATCH bpf v2 0/5] bpf: Support kernel function call in 32-bit ARM Yang Jihong 2022-11-07 9:20 ` Yang Jihong 2022-11-07 9:20 ` [PATCH bpf v2 1/5] bpf: Adapt 32-bit return value kfunc for 32-bit ARM when zext extension Yang Jihong 2022-11-07 9:20 ` Yang Jihong 2022-11-08 23:12 ` Martin KaFai Lau 2022-11-08 23:12 ` Martin KaFai Lau 2022-11-26 9:45 ` Yang Jihong 2022-11-26 9:45 ` Yang Jihong 2022-11-07 9:20 ` [PATCH bpf v2 2/5] bpf: Adjust sk size check for sk in bpf_skb_is_valid_access for CO_RE in 32-bit arch Yang Jihong 2022-11-07 9:20 ` Yang Jihong 2022-11-07 9:20 ` [PATCH bpf v2 3/5] libbpf: Skip adjust mem size for load pointer in 32-bit arch in CO_RE Yang Jihong 2022-11-07 9:20 ` Yang Jihong 2022-11-08 1:22 ` Andrii Nakryiko [this message] 2022-11-08 1:22 ` Andrii Nakryiko 2022-11-08 2:44 ` Yang Jihong 2022-11-08 2:44 ` Yang Jihong 2022-11-07 9:20 ` [PATCH bpf v2 4/5] bpf: Add kernel function call support in 32-bit ARM for EABI Yang Jihong 2022-11-07 9:20 ` Yang Jihong 2022-11-07 12:33 ` Russell King (Oracle) 2022-11-07 12:33 ` Russell King (Oracle) 2022-11-08 0:52 ` Yang Jihong 2022-11-08 0:52 ` Yang Jihong 2022-11-07 9:20 ` [PATCH bpf v2 5/5] bpf:selftests: Add kfunc_call test for mixing 32-bit and 64-bit parameters Yang Jihong 2022-11-07 9:20 ` Yang Jihong
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=CAEf4BzZd+hzeRhLD6DaDVx67fySd+KaTP6eOJid-u9mqnQwigg@mail.gmail.com \ --to=andrii.nakryiko@gmail.com \ --cc=andrii@kernel.org \ --cc=asavkov@redhat.com \ --cc=ast@kernel.org \ --cc=benjamin.tissoires@redhat.com \ --cc=bpf@vger.kernel.org \ --cc=daniel@iogearbox.net \ --cc=davem@davemloft.net \ --cc=delyank@fb.com \ --cc=edumazet@google.com \ --cc=haoluo@google.com \ --cc=illusionist.neo@gmail.com \ --cc=john.fastabend@gmail.com \ --cc=jolsa@kernel.org \ --cc=kpsingh@kernel.org \ --cc=kuba@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-kselftest@vger.kernel.org \ --cc=linux@armlinux.org.uk \ --cc=martin.lau@linux.dev \ --cc=memxor@gmail.com \ --cc=mykolal@fb.com \ --cc=netdev@vger.kernel.org \ --cc=pabeni@redhat.com \ --cc=sdf@google.com \ --cc=shuah@kernel.org \ --cc=song@kernel.org \ --cc=yangjihong1@huawei.com \ --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: linkBe 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.