From: sashiko-bot@kernel.org
To: adubey@linux.ibm.com
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH bpf v9 6/8] selftest/bpf: Add tailcall verifier selftest for powerpc64
Date: Tue, 23 Jun 2026 22:02:53 +0000 [thread overview]
Message-ID: <20260623220254.05A131F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260623231411.6216-7-adubey@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] JIT disasm regex for loading 64-bit immediates strictly expects 'oris' and 'ori' instructions, but the PowerPC JIT conditionally omits them.
- [Medium] JIT disasm regex for BPF-to-BPF tail calls fails on PowerPC kernels with CONFIG_PPC_KERNEL_PCREL enabled.
--
commit b4e7d4404702ca69adf00490d083d127f762e2ed
Author: Abhishek Dubey <adubey@linux.ibm.com>
selftest/bpf: Add tailcall verifier selftest for powerpc64
This commit adds a tailcall verifier selftest targeting the powerpc64
architecture. It introduces __arch_powerpc64 JIT regex matches for both
regular function calls and tail calls.
> diff --git a/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c b/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c
> index 48fa34d2959f4..09d7e92c84910 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c
> @@ -91,6 +91,75 @@ __jited(" popq %rax")
> __jited(" jmp {{.*}}") /* jump to tail call tgt */
> __jited("L0: leave")
> __jited(" {{(retq|jmp 0x)}}") /* return or jump to rethunk */
> +__arch_powerpc64
> +/* program entry for main(), regular function prologue */
> +__jited(" nop")
> +__jited("...") /* ld 2, 16(13) absent with CONFIG_PPC_KERNEL_PCREL */
> +__jited(" li 9, 0")
> +__jited(" std 9, -8(1)")
> +__jited(" mflr 0")
> +__jited(" std 0, 16(1)")
> +__jited(" stdu 1, {{.*}}(1)")
> +/* load address and call sub() via count register */
> +__jited(" lis 12, {{.*}}")
> +__jited(" sldi 12, 12, 32")
> +__jited(" oris 12, 12, {{.*}}")
> +__jited(" ori 12, 12, {{.*}}")
[Severity: Medium]
Will this strict absolute 64-bit load match fail on Power10 and other
kernels with CONFIG_PPC_KERNEL_PCREL enabled?
It appears that when CONFIG_PPC_KERNEL_PCREL is enabled,
bpf_jit_emit_func_call_rel() checks if the relative offset between the
call site and the target is within 8GB. Since main() and sub() are BPF
programs allocated close to each other in vmalloc space, the offset should
fit within 8GB.
This means the JIT would emit a PC-relative load (pla r12, addr followed
by paddi) instead of the absolute load sequence expected here. Does the test
need a fallback or PCREL-specific wildcard block?
> +__jited(" mtctr 12")
> +__jited(" bctrl")
[ ... ]
> +/* tail call prologue for subprogram */
> +__jited(" ld 10, 0(1)")
> +__jited(" ld 9, -8(10)")
> +__jited(" cmpldi 9, 33")
> +__jited(" bt {{.*}}, {{.*}}")
> +__jited(" addi 9, 10, -8")
> +__jited(" std 9, -8(1)")
> +__jited(" lis {{.*}}, {{.*}}")
> +__jited(" sldi {{.*}}, {{.*}}, 32")
> +__jited(" oris {{.*}}, {{.*}}, {{.*}}")
> +__jited(" ori {{.*}}, {{.*}}, {{.*}}")
[Severity: Medium]
Can this strict expectation for oris and ori cause test failures depending
on the page size?
The PPC_LI64 macro optimizes 64-bit immediate loads by omitting the ori
instruction if the lowest 16 bits are zero, and oris if bits 16-31 are zero.
Because the test loads the address of the jmp_table map, which is allocated
via vmalloc() and is page-aligned, on PowerPC64 systems with a 64KB page size
the lowest 16 bits will always be zero. This would cause the ori instruction
to be omitted entirely, resulting in a regex mismatch.
> +__jited(" li {{.*}}, 0")
> +__jited(" lwz 9, {{.*}}({{.*}})")
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260623231411.6216-1-adubey@linux.ibm.com?part=6
next prev parent reply other threads:[~2026-06-23 22:02 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-23 23:14 [PATCH bpf v9 0/8] powerpc/bpf: address missing verifier selftest coverage adubey
2026-06-23 23:14 ` [PATCH bpf v9 1/8] powerpc/bpf: fix alignment of long branch trampoline address adubey
2026-06-23 23:14 ` [PATCH bpf v9 2/8] powerpc/bpf: Move out dummy_tramp_addr after Long branch stub adubey
2026-06-23 20:07 ` bot+bpf-ci
2026-06-23 23:14 ` [PATCH bpf v9 3/8] selftest/bpf: Fixing powerpc JIT disassembly failure adubey
2026-06-23 20:07 ` bot+bpf-ci
2026-06-23 23:14 ` [PATCH bpf v9 4/8] selftest/bpf: Enable verifier selftest for powerpc64 adubey
2026-06-23 23:14 ` [PATCH bpf v9 5/8] powerpc64/bpf: fix compare instruction emitted for tailcall adubey
2026-06-23 23:14 ` [PATCH bpf v9 6/8] selftest/bpf: Add tailcall verifier selftest for powerpc64 adubey
2026-06-23 22:02 ` sashiko-bot [this message]
2026-06-23 23:14 ` [PATCH bpf v9 7/8] powerpc/bpf: fix buffer overflow in JIT for large BPF programs adubey
2026-06-23 22:17 ` sashiko-bot
2026-06-23 23:14 ` [PATCH bpf v9 8/8] powerpc64/bpf: fix percpu private stack leak on JIT failure adubey
2026-06-23 22:28 ` sashiko-bot
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=20260623220254.05A131F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=adubey@linux.ibm.com \
--cc=bpf@vger.kernel.org \
--cc=sashiko-reviews@lists.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.