]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
bpf: allow states pruning for misc/invalid slots in iterator loops
authorEduard Zingerman <eddyz87@gmail.com>
Wed, 31 Dec 2025 05:36:03 +0000 (21:36 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 31 Dec 2025 17:01:13 +0000 (09:01 -0800)
commit840692326e92b5deb76c224931e8ca145ce7cfb8
tree02a15bbebc69c387cd4886c70a6f2b62fe056bfe
parentccaa6d2c9635a8db06a494d67ef123b56b967a78
bpf: allow states pruning for misc/invalid slots in iterator loops

Within an iterator or callback based loop, it should be safe to prune
the current state if the old state stack slot is marked as
STACK_INVALID or STACK_MISC:
- either all branches of the old state lead to a program exit;
- or some branch of the old state leads the current state.

This is the same logic as applied in non-loop cases when
states_equal() is called in NOT_EXACT mode.

The test case that exercises stacksafe() and demonstrates the
difference in verification performance is included in the next patch.
I'm not sure if it is possible to prepare a test case that exercises
regsafe(); it appears that the compute_live_registers() pass makes
this impossible.

Nevertheless, for code readability reasons, I think that stacksafe()
and regsafe() should handle STACK_INVALID / NOT_INIT symmetrically.
Hence, this commit changes both functions.

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20251230-loop-stack-misc-pruning-v1-1-585cfd6cec51@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c