• Martin KaFai Lau's avatar
    bpf: Check the other end of slot_type for STACK_SPILL · 27113c59
    Martin KaFai Lau authored
    Every 8 bytes of the stack is tracked by a bpf_stack_state.
    Within each bpf_stack_state, there is a 'u8 slot_type[8]' to track
    the type of each byte.  Verifier tests slot_type[0] == STACK_SPILL
    to decide if the spilled reg state is saved.  Verifier currently only
    saves the reg state if the whole 8 bytes are spilled to the stack,
    so checking the slot_type[7] is the same as checking slot_type[0].
    
    The later patch will allow verifier to save the bounded scalar
    reg also for <8 bytes spill.  There is a llvm patch [1] to ensure
    the <8 bytes spill will be 8-byte aligned,  so checking
    slot_type[7] instead of slot_type[0] is required.
    
    While at it, this patch refactors the slot_type[0] == STACK_SPILL
    test into a new function is_spilled_reg() and change the
    slot_type[0] check to slot_type[7] check in there also.
    
    [1] https://reviews.llvm.org/D109073Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20210922004934.624194-1-kafai@fb.com
    27113c59
verifier.c 395 KB