• Daniel Borkmann's avatar
    bpf: fix checking xdp_adjust_head on tail calls · c2002f98
    Daniel Borkmann authored
    Commit 17bedab2 ("bpf: xdp: Allow head adjustment in XDP prog")
    added the xdp_adjust_head bit to the BPF prog in order to tell drivers
    that the program that is to be attached requires support for the XDP
    bpf_xdp_adjust_head() helper such that drivers not supporting this
    helper can reject the program. There are also drivers that do support
    the helper, but need to check for xdp_adjust_head bit in order to move
    packet metadata prepended by the firmware away for making headroom.
    
    For these cases, the current check for xdp_adjust_head bit is insufficient
    since there can be cases where the program itself does not use the
    bpf_xdp_adjust_head() helper, but tail calls into another program that
    uses bpf_xdp_adjust_head(). As such, the xdp_adjust_head bit is still
    set to 0. Since the first program has no control over which program it
    calls into, we need to assume that bpf_xdp_adjust_head() helper is used
    upon tail calls. Thus, for the very same reasons in cb_access, set the
    xdp_adjust_head bit to 1 when the main program uses tail calls.
    
    Fixes: 17bedab2 ("bpf: xdp: Allow head adjustment in XDP prog")
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Cc: Martin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c2002f98
syscall.c 24.7 KB