• Ben Hutchings's avatar
    bpf/verifier: Fix states_equal() comparison of pointer and UNKNOWN · 37435f7e
    Ben Hutchings authored
    An UNKNOWN_VALUE is not supposed to be derived from a pointer, unless
    pointer leaks are allowed.  Therefore, states_equal() must not treat
    a state with a pointer in a register as "equal" to a state with an
    UNKNOWN_VALUE in that register.
    
    This was fixed differently upstream, but the code around here was
    largely rewritten in 4.14 by commit f1174f77 "bpf/verifier: rework
    value tracking".  The bug can be detected by the bpf/verifier sub-test
    "pointer/scalar confusion in state equality check (way 1)".
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    Cc: Edward Cree <ecree@solarflare.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    37435f7e
verifier.c 101 KB