• Andrii Nakryiko's avatar
    bpf: remove unnecessary prune and jump points · 618945fb
    Andrii Nakryiko authored
    Don't mark some instructions as jump points when there are actually no
    jumps and instructions are just processed sequentially. Such case is
    handled naturally by precision backtracking logic without the need to
    update jump history. See get_prev_insn_idx(). It goes back linearly by
    one instruction, unless current top of jmp_history is pointing to
    current instruction. In such case we use `st->jmp_history[cnt - 1].prev_idx`
    to find instruction from which we jumped to the current instruction
    non-linearly.
    
    Also remove both jump and prune point marking for instruction right
    after unconditional jumps, as program flow can get to the instruction
    right after unconditional jump instruction only if there is a jump to
    that instruction from somewhere else in the program. In such case we'll
    mark such instruction as prune/jump point because it's a destination of
    a jump.
    
    This change has no changes in terms of number of instructions or states
    processes across Cilium and selftests programs.
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/r/20221206233345.438540-4-andrii@kernel.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    618945fb
verifier.c 488 KB