lkml.org 
[lkml]   [2016]   [Oct]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH] drivers/net/usb/r8152 fix broken rx checksums
From
Date
On 16-10-26 06:36 PM, Mark Lord wrote:
> The r8152 driver has been broken since (approx) 3.6.16,

Correction: broken since 3.16.xx.

> when support was added for hardware rx checksum on newer chip versions.
> Symptoms include random segfaults and silent data corruption over NFS.
>
> This does not work on the VER_02 dongle I have here
> when used with a slow embedded system CPU.
> Google reveals others reporting similar issues on Raspberry Pi.
>
> So, disable hardware rx checksum for VER_02, and fix
> an obvious coding error for IPV6 checksums in the same function.
>
> Because this bug results in silent data corruption,
> it is a good candidate for back-porting to -stable >= 3.16.xx.
> Patch attached (to deal with buggy mailer) and also below for review.
>
> Signed-off-by: Mark Lord <mlord@pobox.com>
>
> --- old/drivers/net/usb/r8152.c 2016-09-30 04:20:43.000000000 -0400
> +++ linux/drivers/net/usb/r8152.c 2016-10-26 14:15:44.932517676 -0400
> @@ -1645,7 +1645,7 @@
> u8 checksum = CHECKSUM_NONE;
> u32 opts2, opts3;
>
> - if (tp->version == RTL_VER_01)
> + if (tp->version == RTL_VER_01 || tp->version == RTL_VER_02)
> goto return_result;
>
> opts2 = le32_to_cpu(rx_desc->opts2);
> @@ -1660,7 +1660,7 @@
> checksum = CHECKSUM_NONE;
> else
> checksum = CHECKSUM_UNNECESSARY;
> - } else if (RD_IPV6_CS) {
> + } else if (opts2 & RD_IPV6_CS) {
> if ((opts2 & RD_UDP_CS) && !(opts3 & UDPF))
> checksum = CHECKSUM_UNNECESSARY;
> else if ((opts2 & RD_TCP_CS) && !(opts3 & TCPF))


--
Mark Lord
Real-Time Remedies Inc.
mlord@pobox.com

\
 
 \ /
  Last update: 2016-10-27 00:55    [W:0.135 / U:0.136 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site