• Daniel Borkmann's avatar
    bpf: fix cb access in socket filter programs on tail calls · 6b1bb01b
    Daniel Borkmann authored
    Commit ff936a04 ("bpf: fix cb access in socket filter programs")
    added a fix for socket filter programs such that in i) AF_PACKET the
    20 bytes of skb->cb[] area gets zeroed before use in order to not leak
    data, and ii) socket filter programs attached to TCP/UDP sockets need
    to save/restore these 20 bytes since they are also used by protocol
    layers at that time.
    
    The problem is that bpf_prog_run_save_cb() and bpf_prog_run_clear_cb()
    only look at the actual attached program to determine whether to zero
    or save/restore the skb->cb[] parts. There can be cases where the
    actual attached program does not access the skb->cb[], but the program
    tail calls into another program which does access this area. In such
    a case, the zero or save/restore is currently not performed.
    
    Since the programs we tail call into are unknown at verification time
    and can dynamically change, we need to assume that whenever the attached
    program performs a tail call, that later programs could access the
    skb->cb[], and therefore we need to always set cb_access to 1.
    
    Fixes: ff936a04 ("bpf: fix cb access in socket filter programs")
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6b1bb01b
syscall.c 24.7 KB