1
0
mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2026-01-12 01:20:14 +00:00
Eduard Zingerman b0c8e6d3d8 bpf: account for current allocated stack depth in widen_imprecise_scalars()
The usage pattern for widen_imprecise_scalars() looks as follows:

    prev_st = find_prev_entry(env, ...);
    queued_st = push_stack(...);
    widen_imprecise_scalars(env, prev_st, queued_st);

Where prev_st is an ancestor of the queued_st in the explored states
tree. This ancestor is not guaranteed to have same allocated stack
depth as queued_st. E.g. in the following case:

    def main():
      for i in 1..2:
        foo(i)        // same callsite, differnt param

    def foo(i):
      if i == 1:
        use 128 bytes of stack
      iterator based loop

Here, for a second 'foo' call prev_st->allocated_stack is 128,
while queued_st->allocated_stack is much smaller.
widen_imprecise_scalars() needs to take this into account and avoid
accessing bpf_verifier_state->frame[*]->stack out of bounds.

Fixes: 2793a8b015f7 ("bpf: exact states comparison for iterator convergence checks")
Reported-by: Emil Tsalapatis <emil@etsalapatis.com>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20251114025730.772723-1-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2025-11-14 09:26:05 -08:00
..
2025-10-20 09:41:27 -10:00
2025-10-07 08:40:15 -07:00
2025-10-04 11:13:11 -07:00
2025-10-07 08:40:15 -07:00
2025-10-27 10:52:18 -07:00
2025-08-30 10:15:28 -04:00
2025-09-30 08:22:16 -07:00
2025-10-02 18:44:54 -07:00
2025-10-02 18:44:54 -07:00
2025-09-25 09:23:54 +02:00
2025-09-29 11:20:29 -07:00
2025-09-29 11:20:29 -07:00
2025-09-29 11:20:29 -07:00
2025-10-02 18:44:54 -07:00
2025-09-25 09:23:54 +02:00
2025-09-29 11:20:29 -07:00
2025-03-24 09:52:37 -07:00