• Alexander Duyck's avatar
    ixgbe: Fix ATR so that it correctly handles IPv6 extension headers · e2873d43
    Alexander Duyck authored
    The ATR code was assuming that it would be able to use tcp_hdr for
    every TCP frame that came through.  However this isn't the case as it
    is possible for a frame to arrive that is TCP but sent through something
    like a raw socket.  As a result the driver was setting up bad filters in
    which tcp_hdr was really pointing to the network header so the data was
    all invalid.
    
    In order to correct this I have added a bit of parsing logic that will
    determine the TCP header location based off of the network header and
    either the offset in the case of the IPv4 header, or a walk through the
    IPv6 extension headers until it encounters the header that indicates
    IPPROTO_TCP.  In addition I have added checks to verify that the lowest
    protocol provided is recognized as IPv4 or IPv6 to help mitigate raw
    sockets using ETH_P_ALL from having ATR applied to them.
    Signed-off-by: default avatarAlexander Duyck <aduyck@mirantis.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    e2873d43
ixgbe_main.c 267 KB