diff options
| author | Alexei Starovoitov <ast@kernel.org> | 2026-10-24 03:58:06 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2026-10-24 03:58:13 +0000 |
| commit | e27c798425407fcbab81f40de4f1a37ab039edb5 (patch) | |
| tree | 6ef51708fffca3f3d43e2bdc5aeebce52eaa9e26 /include/linux/timerqueue.h | |
| parent | fb2b27d214c3b88d926a303267dd83cfdb428b13 (diff) | |
| parent | a938f51d3522b9ff1fbe1171d9504d584a40eb58 (diff) | |
Merge branch 'bpf-fix-x86-jit-stopping-before-jumps-converge'
Mykyta Yatsenko says:
====================
bpf: Fix x86 JIT stopping before jumps converge
The x86 JIT stops its sizing passes once two passes give the same image
length. A backward jump can grow while other jumps shrink, so the length
may repeat with jump sizes still changing. The final pass then emits code
of a different size than was sized, hits "bpf_jit: fatal error" and the
program fails to load with -ENOTSUPP.
Patch 1 sizes backward jumps by the insns they jump over, so no insn
grows between passes and a repeated length means nothing moved.
Patch 2 adds a selftest which fails to load without the fix.
This was hit in CI by cgroup_tcp_skb with the unpublished branch
inversion series, whose layout change happened to trigger it.
Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
---
Changes in v2:
- Size backward jumps by the insns they jump over instead of checking
for moved insns, drop the ja -1 special case and the imm8 limit of 123
(Alexei)
- Start every insn at BPF_MAX_INSN_SIZE, so none grows in the first pass
- Check that the selftest program is JITed
- Link to v1: https://patch.msgid.link/20261021-jit_size_fix-v1-0-b89fd32cafd6@meta.com
====================
Link: https://patch.msgid.link/20261022-jit_size_fix-v2-0-4bee6921b218@meta.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'include/linux/timerqueue.h')
0 files changed, 0 insertions, 0 deletions
