]> git.baikalelectronics.ru Git - kernel.git/commit
asix: On RX avoid creating bad Ethernet frames
authorDean Jenkins <Dean_Jenkins@mentor.com>
Fri, 2 Oct 2015 13:29:07 +0000 (14:29 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Oct 2015 13:58:43 +0000 (06:58 -0700)
commit05844991c95b1fb8189da545687d3bb46dd7522f
tree95a924fc00afec6805f16856c5ff092b1e71a1e0
parent2bc1ac521b390eaabea212e035c579b43942c18e
asix: On RX avoid creating bad Ethernet frames

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: Dean Jenkins <Dean_Jenkins@mentor.com>
Signed-off-by: Mark Craske <Mark_Craske@mentor.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/asix_common.c