• Alexei Starovoitov's avatar
    bpf/verifier: fix verifier instability · a9c676bc
    Alexei Starovoitov authored
    Edward Cree says:
    In check_mem_access(), for the PTR_TO_CTX case, after check_ctx_access()
    has supplied a reg_type, the other members of the register state are set
    appropriately.  Previously reg.range was set to 0, but as it is in a
    union with reg.map_ptr, which is larger, upper bytes of the latter were
    left in place.  This then caused the memcmp() in regsafe() to fail,
    preventing some branches from being pruned (and occasionally causing the
    same program to take a varying number of processed insns on repeated
    verifier runs).
    
    Fix the instability by clearing bpf_reg_state in __mark_reg_[un]known()
    
    Fixes: f1174f77 ("bpf/verifier: rework value tracking")
    Debugged-by: default avatarEdward Cree <ecree@solarflare.com>
    Acked-by: default avatarEdward Cree <ecree@solarflare.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    a9c676bc
verifier.c 173 KB