• Jesper Dangaard Brouer's avatar
    xdp: Xdp_frame add member frame_sz and handle in convert_to_xdp_frame · 34cc0b33
    Jesper Dangaard Brouer authored
    Use hole in struct xdp_frame, when adding member frame_sz, which keeps
    same sizeof struct (32 bytes)
    
    Drivers ixgbe and sfc had bug cases where the necessary/expected
    tailroom was not reserved. This can lead to some hard to catch memory
    corruption issues. Having the drivers frame_sz this can be detected when
    packet length/end via xdp->data_end exceed the xdp_data_hard_end
    pointer, which accounts for the reserved the tailroom.
    
    When detecting this driver issue, simply fail the conversion with NULL,
    which results in feedback to driver (failing xdp_do_redirect()) causing
    driver to drop packet. Given the lack of consistent XDP stats, this can
    be hard to troubleshoot. And given this is a driver bug, we want to
    generate some more noise in form of a WARN stack dump (to ID the driver
    code that inlined convert_to_xdp_frame).
    
    Inlining the WARN macro is problematic, because it adds an asm
    instruction (on Intel CPUs ud2) what influence instruction cache
    prefetching. Thus, introduce xdp_warn and macro XDP_WARN, to avoid this
    and at the same time make identifying the function and line of this
    inlined function easier.
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
    Link: https://lore.kernel.org/bpf/158945337313.97035.10015729316710496600.stgit@firesoul
    34cc0b33
xdp.c 11.9 KB