* [PATCH bpf v2] bpf: Fix jited line info off by the CFI preamble
@ 2026-10-30 18:14 Jose Fernandez (Anthropic)
2026-10-30 18:19 ` sashiko-bot
2026-10-30 21:40 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Jose Fernandez (Anthropic) @ 2026-10-30 18:14 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Eduard Zingerman, Kumar Kartikeya Dwivedi, Martin KaFai Lau,
Song Liu, Yonghong Song, Jiri Olsa, Emil Tsalapatis,
Ihor Solodrai, Ilya Leoshkevich, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
John Fastabend, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, Peter Zijlstra, Puranjay Mohan,
Björn Töpel, Maxwell Bland, Will Deacon, Sami Tolvanen
Cc: bpf, linux-s390, linux-kernel, linux-riscv, Pu Lehui, Sashiko,
Jose Fernandez (Anthropic)
With CONFIG_CFI=y, every jited line info entry after a function's
first is cfi_get_offset() bytes too high on x86-64, riscv64 and arm64,
so tools that use it show the wrong source line.
The JITs count the insn_to_jit_off[] offsets from the start of the
image. Since the CFI commits below, prog->bpf_func starts
cfi_get_offset() bytes into the image, and bpf_prog_fill_jited_linfo()
adds the offsets to prog->bpf_func. s390 corrects its offsets before
the call, the other three JITs do not.
Subtract cfi_get_offset() once in bpf_prog_fill_jited_linfo() and drop
the s390 correction. jited_linfo[0] stays prog->bpf_func, the
function's ksym address. Without CONFIG_CFI, cfi_get_offset() is 0 and
nothing changes.
Fixes: 4f9087f16651 ("x86/cfi,bpf: Fix BPF JIT call")
Fixes: e63985ecd226 ("bpf, riscv64/cfi: Support kCFI + BPF on riscv64")
Fixes: 710618c760c0 ("arm64/cfi,bpf: Support kCFI + BPF on arm64")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://lore.kernel.org/all/20260904014748.C04AA1F000E9@smtp.kernel.org/
Reported-by: Alexei Starovoitov <ast@kernel.org>
Closes: https://lore.kernel.org/all/DLNXZ2WK7TPD.2RZBUNRS4FA4L@gmail.com/
Signed-off-by: Jose Fernandez (Anthropic) <jose.fernandez@linux.dev>
---
Changes in v2:
- Fix it once in bpf_prog_fill_jited_linfo() instead of in the arm64
JIT, which covers x86-64 and riscv64 too, and drop the s390
correction loop.
- Link to v1: https://lore.kernel.org/r/20260925-b4-arm64-bpf-linfo-cfi-v1-1-e930ab335170@linux.dev
Stable trees that do not have commit 227b4e108adc ("s390/bpf: Add
kCFI support") take this without the s390 hunk.
Drafted with the help of an AI assistant and reviewed by the sender.
---
arch/s390/net/bpf_jit_comp.c | 2 --
kernel/bpf/core.c | 8 +++++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
index 56ec49894dda..83da3a00db7e 100644
--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -2428,8 +2428,6 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_verifier_env *env, struct bpf_pr
fp->jited_len = jit.size - cfi_get_offset();
if (!fp->is_func || extra_pass) {
- for (int i = 0; i < fp->len; i++)
- jit.addrs[i] -= cfi_get_offset();
bpf_prog_fill_jited_linfo(fp, jit.addrs + 1);
free_addrs:
kvfree(jit.addrs);
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 7cf37690d41f..b9709e3b7656 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -206,7 +206,9 @@ void bpf_prog_jit_attempt_done(struct bpf_prog *prog)
* here is relative to the prog itself instead of the main prog.
* This array has one entry for each xlated bpf insn.
*
- * jited_off is the byte off to the end of the jited insn.
+ * jited_off is the byte off to the end of the jited insn, counted from
+ * the start of the jited image, which is cfi_get_offset() bytes before
+ * prog->bpf_func.
*
* Hence, with
* insn_start:
@@ -220,7 +222,7 @@ void bpf_prog_jit_attempt_done(struct bpf_prog *prog)
*
* For i > linfo_idx,
*
- * jited_linfo[i] = prog->bpf_func +
+ * jited_linfo[i] = prog->bpf_func - cfi_get_offset() +
* insn_to_jit_off[linfo[i].insn_off - insn_start - 1]
*/
void bpf_prog_fill_jited_linfo(struct bpf_prog *prog,
@@ -248,7 +250,7 @@ void bpf_prog_fill_jited_linfo(struct bpf_prog *prog,
/* The verifier ensures that linfo[i].insn_off is
* strictly increasing
*/
- jited_linfo[i] = prog->bpf_func +
+ jited_linfo[i] = prog->bpf_func - cfi_get_offset() +
insn_to_jit_off[linfo[i].insn_off - insn_start - 1];
}
---
base-commit: fb7bd3a2aad70a76232a7168a505386d0a1396af
change-id: 20260925-b4-arm64-bpf-linfo-cfi-f5c3897e408c
Best regards,
--
Jose Fernandez (Anthropic) <jose.fernandez@linux.dev>
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH bpf v2] bpf: Fix jited line info off by the CFI preamble
2026-10-30 18:14 [PATCH bpf v2] bpf: Fix jited line info off by the CFI preamble Jose Fernandez (Anthropic)
@ 2026-10-30 18:19 ` sashiko-bot
2026-10-30 21:40 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: sashiko-bot @ 2026-10-30 18:19 UTC (permalink / raw)
To: Jose Fernandez (Anthropic)
Cc: linux-s390, Heiko Carstens, Vasily Gorbik, Alexander Gordeev,
Christian Borntraeger
> With CONFIG_CFI=y, every jited line info entry after a function's
> first is cfi_get_offset() bytes too high on x86-64, riscv64 and arm64,
> so tools that use it show the wrong source line.
>
> The JITs count the insn_to_jit_off[] offsets from the start of the
> image. Since the CFI commits below, prog->bpf_func starts
> cfi_get_offset() bytes into the image, and bpf_prog_fill_jited_linfo()
> adds the offsets to prog->bpf_func. s390 corrects its offsets before
> the call, the other three JITs do not.
>
> Subtract cfi_get_offset() once in bpf_prog_fill_jited_linfo() and drop
> the s390 correction. jited_linfo[0] stays prog->bpf_func, the
> function's ksym address. Without CONFIG_CFI, cfi_get_offset() is 0 and
> nothing changes.
>
> Fixes: 4f9087f16651 ("x86/cfi,bpf: Fix BPF JIT call")
> Fixes: e63985ecd226 ("bpf, riscv64/cfi: Support kCFI + BPF on riscv64")
> Fixes: 710618c760c0 ("arm64/cfi,bpf: Support kCFI + BPF on arm64")
> Reported-by: Sashiko <sashiko-bot@kernel.org>
> Closes: https://lore.kernel.org/all/20260904014748.C04AA1F000E9@smtp.kernel.org/
> Reported-by: Alexei Starovoitov <ast@kernel.org>
> Closes: https://lore.kernel.org/all/DLNXZ2WK7TPD.2RZBUNRS4FA4L@gmail.com/
> Signed-off-by: Jose Fernandez (Anthropic) <jose.fernandez@linux.dev>
Sashiko has reviewed this patch and found no issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261030-b4-arm64-bpf-linfo-cfi-v2-1-4eac83435d4b@linux.dev?part=1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH bpf v2] bpf: Fix jited line info off by the CFI preamble
2026-10-30 18:14 [PATCH bpf v2] bpf: Fix jited line info off by the CFI preamble Jose Fernandez (Anthropic)
2026-10-30 18:19 ` sashiko-bot
@ 2026-10-30 21:40 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-10-30 21:40 UTC (permalink / raw)
To: Jose Fernandez
Cc: ast, daniel, andrii, eddyz87, memxor, martin.lau, song,
yonghong.song, jolsa, emil, ihor.solodrai, iii, hca, gor,
agordeev, borntraeger, svens, john.fastabend, pjw, palmer, aou,
alex, peterz, puranjay, bjorn, mbland, will, samitolvanen, bpf,
linux-s390, linux-kernel, linux-riscv, pulehui, sashiko-bot
Hello:
This patch was applied to bpf/bpf.git (master)
by Alexei Starovoitov <ast@kernel.org>:
On Fri, 30 Oct 2026 18:14:22 +0000 you wrote:
> With CONFIG_CFI=y, every jited line info entry after a function's
> first is cfi_get_offset() bytes too high on x86-64, riscv64 and arm64,
> so tools that use it show the wrong source line.
>
> The JITs count the insn_to_jit_off[] offsets from the start of the
> image. Since the CFI commits below, prog->bpf_func starts
> cfi_get_offset() bytes into the image, and bpf_prog_fill_jited_linfo()
> adds the offsets to prog->bpf_func. s390 corrects its offsets before
> the call, the other three JITs do not.
>
> [...]
Here is the summary with links:
- [bpf,v2] bpf: Fix jited line info off by the CFI preamble
https://git.kernel.org/bpf/bpf/c/3e4279dc5144
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-30 21:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-30 18:14 [PATCH bpf v2] bpf: Fix jited line info off by the CFI preamble Jose Fernandez (Anthropic)
2026-10-30 18:19 ` sashiko-bot
2026-10-30 21:40 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox