• Kumar Kartikeya Dwivedi's avatar
    bpf: Fix subprog idx logic in check_max_stack_depth · ba7b3e7d
    Kumar Kartikeya Dwivedi authored
    The assignment to idx in check_max_stack_depth happens once we see a
    bpf_pseudo_call or bpf_pseudo_func. This is not an issue as the rest of
    the code performs a few checks and then pushes the frame to the frame
    stack, except the case of async callbacks. If the async callback case
    causes the loop iteration to be skipped, the idx assignment will be
    incorrect on the next iteration of the loop. The value stored in the
    frame stack (as the subprogno of the current subprog) will be incorrect.
    
    This leads to incorrect checks and incorrect tail_call_reachable
    marking. Save the target subprog in a new variable and only assign to
    idx once we are done with the is_async_cb check which may skip pushing
    of frame to the frame stack and subsequent stack depth checks and tail
    call markings.
    
    Fixes: 7ddc80a4 ("bpf: Teach stack depth check about async callbacks.")
    Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20230717161530.1238-2-memxor@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    ba7b3e7d
verifier.c 572 KB