Skip to content

Commit 9a69758

Browse files
Matrix notes: the walk VM is rejected from 7.2.7 on, by the stable bpf_loop backports
The lvh 7.2 image is 7.2.8 and rejects walk.bpf.o the way bpf-next does: "BPF program is too large. Processed 1000001 insn", with the step callback alone at 850k instructions, against 14k for the whole object on 6.12 and 6.18. This host runs 7.2.6 and loads it. ChangeLog-7.2.7 carries a batch of verifier precision fixes for bpf_loop callbacks, which is where the difference lands. Say so in the workflow header and the README; the 7.2 row keeps gating, since that is a stable kernel.
1 parent 9150046 commit 9a69758

2 files changed

Lines changed: 14 additions & 6 deletions

File tree

‎.github/workflows/kernel-matrix.yml‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,13 @@ name: kernel-matrix
3131
# guarded, so that 6.4 floor is for the build host only, where vmlinux.h is
3232
# generated from the runner's own BTF by `make bpf`. So the gating lines are
3333
# the LTS and stable kernels from 6.6 up. bpf-next is run but does not gate:
34-
# it is a moving target, and 7.3-rc4 made the walk VM's bpf_loop callbacks
35-
# cost 850k verifier instructions against 14k on 6.12, which is worth seeing
36-
# but not worth blocking a merge on until it lands in a release.
34+
# it is a moving target, and what it shows tends to arrive in stable soon
35+
# after — the walk VM's three nested bpf_loops verify in 14k instructions on
36+
# 6.12 and 6.18, but 7.2.7 backported a batch of verifier precision fixes
37+
# for bpf_loop callbacks ("backtracking shouldn't clear outer frame R1-R5
38+
# for callbacks" and kin), after which the same object costs 850k in `step`
39+
# alone and hits the 1M limit on 7.2.8 and on bpf-next. 7.2.6 still loads
40+
# it. That 7.2 row is a real rejection on a stable kernel, so it gates.
3741

3842
on:
3943
workflow_dispatch:

‎README.md‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -478,9 +478,13 @@ buffer held before — a response head where curl's body should be.
478478
run also caught the 6.6 verifier rejecting the wire tap's
479479
`bpf_skb_load_bytes` size as possibly zero, since a verifier before
480480
6.9 does not narrow a register on a `!= 0` branch; the bound is now
481-
rebuilt by arithmetic. bpf-next runs but does not gate: on 7.3-rc4 the
482-
walk VM's `bpf_loop` callbacks cost 850k verifier instructions against
483-
14k on 6.12 and hit the one-million limit. `make veristat-matrix` runs the same thing
481+
rebuilt by arithmetic. bpf-next runs but does not gate. The open
482+
finding is the walk VM: its three nested `bpf_loop`s verify in 14k
483+
instructions on 6.12 and 6.18 and on this host's 7.2.6, but stable
484+
7.2.7 backported a batch of verifier precision fixes for `bpf_loop`
485+
callbacks, after which `step` alone costs 850k and the object hits the
486+
one-million limit on 7.2.8 and on bpf-next. That row gates, because a
487+
stable kernel rejecting it is the matrix's job to say. `make veristat-matrix` runs the same thing
484488
locally with lvh + a static qemu (Linux, KVM, root for the VM), and
485489
`make veristat` is the single-kernel check against this host.
486490

0 commit comments

Comments
 (0)