All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Yonghong Song <yhs@fb.com>
Cc: bpf <bpf@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Kernel Team <kernel-team@fb.com>
Subject: Re: [PATCH bpf-next 02/12] libbpf: Permit 64bit relocation value
Date: Tue, 10 May 2022 16:19:42 -0700	[thread overview]
Message-ID: <CAEf4BzZuLHc=LFV8Gpp7KQ8dGB8gi4TjOBznqo2b9mLq4QENPQ@mail.gmail.com> (raw)
In-Reply-To: <7246362c-8eca-027e-d43d-8d4955ad5bdd@fb.com>

On Tue, May 10, 2022 at 3:14 PM Yonghong Song <yhs@fb.com> wrote:
>
>
>
> On 5/9/22 3:37 PM, Andrii Nakryiko wrote:
> > On Sun, May 1, 2022 at 12:00 PM Yonghong Song <yhs@fb.com> wrote:
> >>
> >> Currently, the libbpf limits the relocation value to be 32bit
> >> since all current relocations have such a limit. But with
> >> BTF_KIND_ENUM64 support, the enum value could be 64bit.
> >> So let us permit 64bit relocation value in libbpf.
> >>
> >> Signed-off-by: Yonghong Song <yhs@fb.com>
> >> ---
> >>   tools/lib/bpf/relo_core.c | 24 ++++++++++++------------
> >>   tools/lib/bpf/relo_core.h |  4 ++--
> >>   2 files changed, 14 insertions(+), 14 deletions(-)
> >>
> >
> > [...]
> >
> >> @@ -929,7 +929,7 @@ int bpf_core_patch_insn(const char *prog_name, struct bpf_insn *insn,
> >>                          int insn_idx, const struct bpf_core_relo *relo,
> >>                          int relo_idx, const struct bpf_core_relo_res *res)
> >>   {
> >> -       __u32 orig_val, new_val;
> >> +       __u64 orig_val, new_val;
> >>          __u8 class;
> >>
> >>          class = BPF_CLASS(insn->code);
> >> @@ -954,14 +954,14 @@ int bpf_core_patch_insn(const char *prog_name, struct bpf_insn *insn,
> >>                  if (BPF_SRC(insn->code) != BPF_K)
> >>                          return -EINVAL;
> >>                  if (res->validate && insn->imm != orig_val) {
> >> -                       pr_warn("prog '%s': relo #%d: unexpected insn #%d (ALU/ALU64) value: got %u, exp %u -> %u\n",
> >> +                       pr_warn("prog '%s': relo #%d: unexpected insn #%d (ALU/ALU64) value: got %u, exp %llu -> %llu\n",
> >>                                  prog_name, relo_idx,
> >>                                  insn_idx, insn->imm, orig_val, new_val);
> >
> > %llu is not valid formatter for __u64 on all architectures, please add
> > explicit (unsigned long long) cast
>
> Okay, will do.
>
> >
> > but also in general for non-ldimm64 instructions we need to check that
> > new value fits in 32 bits
>
> The real 64-bit value can only be retrieved for ldimm64 insn, so I
> suppose it should be fine here. But let me double check.

So, technically (I don't think that happens in practice, though), you
can have ALU operation with a local 32-bit enum with some reasonable
value, which in the kernel is actually ENUM64 with huge value.

>
> >
> > [...]
> >
> >> @@ -1026,7 +1026,7 @@ int bpf_core_patch_insn(const char *prog_name, struct bpf_insn *insn,
> >>
> >>                  imm = insn[0].imm + ((__u64)insn[1].imm << 32);
> >>                  if (res->validate && imm != orig_val) {
> >> -                       pr_warn("prog '%s': relo #%d: unexpected insn #%d (LDIMM64) value: got %llu, exp %u -> %u\n",
> >> +                       pr_warn("prog '%s': relo #%d: unexpected insn #%d (LDIMM64) value: got %llu, exp %llu -> %llu\n",
> >>                                  prog_name, relo_idx,
> >>                                  insn_idx, (unsigned long long)imm,
> >>                                  orig_val, new_val);
> >> @@ -1035,7 +1035,7 @@ int bpf_core_patch_insn(const char *prog_name, struct bpf_insn *insn,
> >>
> >>                  insn[0].imm = new_val;
> >>                  insn[1].imm = 0; /* currently only 32-bit values are supported */
> >
> > as Dave mentioned, not anymore, so this should take higher 32-bit of new_val
>
> Will do.
>
> >
> >
> >> -               pr_debug("prog '%s': relo #%d: patched insn #%d (LDIMM64) imm64 %llu -> %u\n",
> >> +               pr_debug("prog '%s': relo #%d: patched insn #%d (LDIMM64) imm64 %llu -> %llu\n",
> >>                           prog_name, relo_idx, insn_idx,
> >>                           (unsigned long long)imm, new_val);
> >>                  break;
> >> @@ -1261,7 +1261,7 @@ int bpf_core_calc_relo_insn(const char *prog_name,
> >>                           * decision and value, otherwise it's dangerous to
> >>                           * proceed due to ambiguity
> >>                           */
> >> -                       pr_warn("prog '%s': relo #%d: relocation decision ambiguity: %s %u != %s %u\n",
> >> +                       pr_warn("prog '%s': relo #%d: relocation decision ambiguity: %s %llu != %s %llu\n",
> >>                                  prog_name, relo_idx,
> >>                                  cand_res.poison ? "failure" : "success", cand_res.new_val,
> >>                                  targ_res->poison ? "failure" : "success", targ_res->new_val);
> [...]

  reply	other threads:[~2022-05-10 23:20 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-01 19:00 [PATCH bpf-next 00/12] bpf: Add 64bit enum value support Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 01/12] bpf: Add btf enum64 support Yonghong Song
2022-05-09  0:33   ` Dave Marchevsky
2022-05-09 22:29   ` Andrii Nakryiko
2022-05-10 22:06     ` Yonghong Song
2022-05-10 23:18       ` Andrii Nakryiko
2022-05-11  0:17         ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 02/12] libbpf: Permit 64bit relocation value Yonghong Song
2022-05-09  1:06   ` Dave Marchevsky
2022-05-10 19:35     ` Yonghong Song
2022-05-09 22:37   ` Andrii Nakryiko
2022-05-10 22:14     ` Yonghong Song
2022-05-10 23:19       ` Andrii Nakryiko [this message]
2022-05-01 19:00 ` [PATCH bpf-next 03/12] libbpf: Fix an error in 64bit relocation value computation Yonghong Song
2022-05-09  0:55   ` Dave Marchevsky
2022-05-09  0:56     ` Dave Marchevsky
2022-05-09 22:37   ` Andrii Nakryiko
2022-05-10 22:11     ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 04/12] libbpf: Add btf enum64 support Yonghong Song
2022-05-03 17:22   ` kernel test robot
2022-05-05 22:44     ` Yonghong Song
2022-05-05 22:44       ` Yonghong Song
2022-05-09 23:25   ` Andrii Nakryiko
2022-05-10 22:40     ` Yonghong Song
2022-05-10 23:02       ` Yonghong Song
2022-05-10 23:40         ` Andrii Nakryiko
2022-05-10 23:38       ` Andrii Nakryiko
2022-05-11  0:39         ` Yonghong Song
2022-05-11 17:43           ` Andrii Nakryiko
2022-05-11 18:56             ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 05/12] bpftool: " Yonghong Song
2022-05-09 23:31   ` Andrii Nakryiko
2022-05-10 22:43     ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 06/12] selftests/bpf: Fix selftests failure Yonghong Song
2022-05-09  2:21   ` Dave Marchevsky
2022-05-10 19:40     ` Yonghong Song
2022-05-09 23:34   ` Andrii Nakryiko
2022-05-10 22:44     ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 07/12] selftests/bpf: Test new libbpf enum32/enum64 API functions Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 08/12] selftests/bpf: Add BTF_KIND_ENUM64 unit tests Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 09/12] selftests/bpf: Test BTF_KIND_ENUM64 for deduplication Yonghong Song
2022-05-09 23:37   ` Andrii Nakryiko
2022-05-10 22:44     ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 10/12] selftests/bpf: add a test for enum64 value relocation Yonghong Song
2022-05-09 23:38   ` Andrii Nakryiko
2022-05-10 22:45     ` Yonghong Song
2022-05-01 19:00 ` [PATCH bpf-next 11/12] selftests/bpf: Clarify llvm dependency with possible selftest failures Yonghong Song
2022-05-01 19:01 ` [PATCH bpf-next 12/12] docs/bpf: Update documentation for BTF_KIND_ENUM64 support 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='CAEf4BzZuLHc=LFV8Gpp7KQ8dGB8gi4TjOBznqo2b9mLq4QENPQ@mail.gmail.com' \
    --to=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@fb.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: 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.