• Dean Jenkins's avatar
    asix: On RX avoid creating bad Ethernet frames · 3f30b158
    Dean Jenkins authored
    When RX Ethernet frames span multiple URB socket buffers,
    the data stream may suffer a discontinuity which will cause
    the current Ethernet frame in the netdev socket buffer
    to be incomplete. This frame needs to be discarded instead
    of appending unrelated data from the current URB socket buffer
    to the Ethernet frame in the netdev socket buffer. This avoids
    creating a corrupted Ethernet frame in the netdev socket buffer.
    
    A discontinuity can occur when the previous URB socket buffer
    held an incomplete Ethernet frame due to truncation or a
    URB socket buffer containing the end of the Ethernet frame
    was missing.
    
    Therefore, add a sanity test for when an Ethernet frame
    spans multiple URB socket buffers to check that the remaining
    bytes of the currently received Ethernet frame point to
    a good Data header 32-bit word of the next Ethernet
    frame. Upon error, reset the remaining bytes variable to
    zero and discard the current netdev socket buffer.
    Assume that the Data header is located at the start of
    the current socket buffer and attempt to process the next
    Ethernet frame from there. This avoids unnecessarily
    discarding a good URB socket buffer that contains a new
    Ethernet frame.
    Signed-off-by: default avatarDean Jenkins <Dean_Jenkins@mentor.com>
    Signed-off-by: default avatarMark Craske <Mark_Craske@mentor.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3f30b158
asix_common.c 15.8 KB