All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kumar Kartikeya Dwivedi" <memxor@gmail.com>
To: "Yonghong Song" <yonghong.song@linux.dev>, <bpf@vger.kernel.org>
Cc: "Alexei Starovoitov" <ast@kernel.org>,
	"Andrii Nakryiko" <andrii@kernel.org>,
	"Daniel Borkmann" <daniel@iogearbox.net>,
	"Eduard Zingerman" <eddyz87@gmail.com>, <kernel-team@fb.com>
Subject: Re: [PATCH bpf-next v3 0/3] bpf: Fix trampoline handling of 128-bit values
Date: Sat, 11 Jul 2026 03:02:35 +0200	[thread overview]
Message-ID: <DJVC4VW0JKXX.1DBERHV6ZVCMX@gmail.com> (raw)
In-Reply-To: <20260710225206.4013062-1-yonghong.song@linux.dev>

On Sat Jul 11, 2026 at 12:52 AM CEST, Yonghong Song wrote:
> The BPF trampoline preserves only 8 bytes of a target function's return
> value (R0), and its register save area under-allocates space for 128-bit
> arguments for x86_64. These two problems lead to memory corruption or
> incorrect values observed by BPF programs and the real caller.
>
> This series fixes both issues and adds two selftests, otherwise, each of
> them will fail if without the corresponding fix.
>

This is almost ready, but CI currently fails for tracing_struct tests. [0]

My AI agent suggests the following root cause, which sounds like a pahole issue.

"
• The failure is caused by missing module BTF, not by the trampoline fix itself.

  tracing_struct/int128_args fails with -ESRCH because pahole omits
  bpf_testmod_test_int128_arg() from bpf_testmod.ko’s BTF. The failure occurs
  before the BPF program attaches; see .kdev/logs/vm-cmd.log:3.

  The problematic signature is tools/testing/selftests/bpf/test_kmods/bpf_testmod.c:184:

  bpf_testmod_test_int128_arg(__int128 a, int b, long c)

  On x86-64:

  - a consumes rdi:rsi.
  - b, the second source parameter, is therefore in rdx.
  - pahole maps the second parameter positionally to rsi, sees b in rdx, and
    marks the function as having unexpected register usage.
  - Kernel BTF generation enables consistent_func, so the complete function is
    omitted from BTF (scripts/Makefile.btf:17).

  Verbose pahole confirmed:

  bpf_testmod_test_int128_arg : skipping BTF encoding of function due to unexpected register usage for parameter

  This also means the comment claiming that putting __int128 first prevents the pahole issue is incorrect.

  A scratch probe with the exact kdev Clang and pahole showed:

  int128_first : skipping BTF encoding ...
  FUNC int128_last ...

  The likely test correction is to use:

  bpf_testmod_test_int128_arg(int b, long c, __int128 a)

  and update tools/testing/selftests/bpf/progs/tracing_struct_int128.c:12 to
  read b from ctx[0], c from ctx[1], and the return value from ctx[4]. With two
  preceding scalar registers, the 128-bit argument starts at an even register
  pair on arm64 too. This still exercises the four-slot allocation that the x86
  patch fixes.
"

  [0]: https://github.com/kernel-patches/bpf/pull/12778

> Changelogs:
>   v2 -> v3:
>     - v2: https://lore.kernel.org/bpf/20260710182204.1085329-1-yonghong.song@linux.dev/
>     - Align __int128 argument at even position enforced by arm64.
>   v1 -> v2:
>     - v1: https://lore.kernel.org/bpf/20260710144404.2579671-1-yonghong.song@linux.dev/
>     - Also handle __int128 arguments for x86_64.
>
> Yonghong Song (3):
>   bpf: Reject >8 byte return values on return-reading trampoline paths
>   bpf, x86: Fix trampoline stack size for 128-bit arguments
>   selftests/bpf: Add tests for >8 byte return value and 128-bit
>     arguments
>
>  arch/x86/net/bpf_jit_comp.c                   |  7 ++--
>  kernel/bpf/bpf_struct_ops.c                   | 12 +++++++
>  kernel/bpf/verifier.c                         | 25 +++++++++++++
>  .../bpf/prog_tests/tracing_failure.c          | 12 +++++++
>  .../selftests/bpf/prog_tests/tracing_struct.c | 36 +++++++++++++++++++
>  .../selftests/bpf/progs/tracing_failure.c     |  6 ++++
>  .../bpf/progs/tracing_struct_int128.c         | 18 ++++++++++
>  .../selftests/bpf/test_kmods/bpf_testmod.c    | 32 +++++++++++++++++
>  8 files changed, 143 insertions(+), 5 deletions(-)
>  create mode 100644 tools/testing/selftests/bpf/progs/tracing_struct_int128.c


  parent reply	other threads:[~2026-07-11  1:02 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-10 22:52 [PATCH bpf-next v3 0/3] bpf: Fix trampoline handling of 128-bit values Yonghong Song
2026-07-10 22:52 ` [PATCH bpf-next v3 1/3] bpf: Reject >8 byte return values on return-reading trampoline paths Yonghong Song
2026-07-10 22:52 ` [PATCH bpf-next v3 2/3] bpf, x86: Fix trampoline stack size for 128-bit arguments Yonghong Song
2026-07-10 22:52 ` [PATCH bpf-next v3 3/3] selftests/bpf: Add tests for >8 byte return value and " Yonghong Song
2026-07-11  1:02 ` Kumar Kartikeya Dwivedi [this message]
2026-07-11  3:58   ` [PATCH bpf-next v3 0/3] bpf: Fix trampoline handling of 128-bit values Yonghong Song
2026-07-11 12:18 ` Leon Hwang

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=DJVC4VW0JKXX.1DBERHV6ZVCMX@gmail.com \
    --to=memxor@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=kernel-team@fb.com \
    --cc=yonghong.song@linux.dev \
    /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.