linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Lord <mlord@pobox.com>
To: David Miller <davem@davemloft.net>, hayeswang@realtek.com
Cc: netdev@vger.kernel.org, nic_swsd@realtek.com,
	linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH net 1/2] r8152: fix the sw rx checksum is unavailable
Date: Thu, 24 Nov 2016 11:43:53 -0500	[thread overview]
Message-ID: <23e0c132-8844-0a34-3e0b-e412f76493ba@pobox.com> (raw)
In-Reply-To: <20161124.112152.692025478489876693.davem@davemloft.net>

On 16-11-24 11:21 AM, David Miller wrote:
> From: Hayes Wang <hayeswang@realtek.com>
> Date: Thu, 24 Nov 2016 13:26:55 +0000
>
>> I don't think the garbage results from our driver or device.
> This is my impression with what has been presented so far as well.

It's not garbage.

The latest run with the debug code I posted here earlier just spat out this below.
Using coherent (guarded, non-cacheable) RX buffers, with mb() calls:

[   15.199157] r8152_check_rx_desc: rx_desc looks bad.
[   15.204270] r8152_rx_bottom: offset=0/3376 bad rx_desc
[   15.209584] r8152_dump_rx_desc: 3d435253 3034336d 202f3a30 47524154 2f3d5445 3034336d rx_len=21075

The bad data in this case is ASCII:

         "SRC=m3400:/ TARGET=/m340"

This data is what is seen in /run/mount/utab, a file that is read/written over NFS on each boot.

         "SRC=m3400:/ TARGET=/m3400 ROOT=/ ATTRS=nolock,addr=192.168.8.1\n"

But how does this ASCII data end up at offset zero of the rx buffer??
Not possible -- this isn't even stale data, because only an rx_desc could
be at that offset in that buffer.

So even if this were a platform memory coherency issue, one should still
never see ASCII data at the beginning of an rx buffer.  The driver NEVER
writes anything to the rx buffers.  Only the USB hardware ever does.

And only the r8152 dongle/driver exhibits this issue.
Other USB dongles do not.  They *might* still have such issues,
but because they use software checksums, the bad packets are caught/rejected.

The r8152 driver, without the debug/error-checking additions, would have tried
to interpret that ASCII data as an "rx_desc", and would have interpreted the
"checksum bits" therein as "valid checksum", and the packet would have passed
through the network stack, corrupting data.

This driver worked without noticeable issues in 3.12.xx.
It hasn't worked since.  Because it now trusts the hardware checksums,
without first checking to see if noise-on-the-line or something else
has corrupted the data before receipt in the rx buffer.

Based on the above capture, I suspect a bug in the chip itself, which perhaps
is only manifest on a very slow CPU.

Nobody here tests with slow CPUs, but they are very prevalent in embedded space.
And very few people use USB network dongles nowadays either, as nearly all "computers"
have built-in networking.  The market for USB network dongles is mostly embedded space.

Ergo.

Cheers

  reply	other threads:[~2016-11-24 16:44 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-11  7:15 [PATCH net 0/2] r8152: rx patches Hayes Wang
2016-11-11  7:15 ` [PATCH net 1/2] r8152: fix the sw rx checksum is unavailable Hayes Wang
2016-11-17  3:36   ` Hayes Wang
2016-11-17 14:14     ` Mark Lord
2016-11-17 14:25       ` Mark Lord
     [not found]     ` <d683c019-4e0f-6fe6-368c-c4fc86c72fe6@pobox.com>
2016-11-18  7:57       ` Hayes Wang
2016-11-18 12:03         ` Mark Lord
2016-11-22 13:12           ` Mark Lord
2016-11-23  3:52           ` Hayes Wang
2016-11-23 13:41             ` Mark Lord
2016-11-23 15:12               ` Hayes Wang
2016-11-23 19:29                 ` Mark Lord
2016-11-24  3:24                   ` Hayes Wang
2016-11-24 12:31                   ` Mark Lord
2016-11-24 13:26                     ` Hayes Wang
2016-11-24 15:24                       ` Mark Lord
2016-11-25  6:11                         ` Hayes Wang
2016-11-25 12:36                           ` Mark Lord
2016-11-24 16:21                       ` David Miller
2016-11-24 16:43                         ` Mark Lord [this message]
2016-11-24 17:00                           ` Mark Lord
2016-11-24 17:13                             ` David Miller
2016-11-24 17:11                           ` David Miller
2016-11-24 18:34                             ` Mark Lord
2016-11-24 18:49                               ` Mark Lord
2016-11-24 19:00                               ` Greg KH
2016-11-24 19:10                                 ` Mark Lord
2016-11-24 19:17                                   ` Greg KH
2016-11-25  9:52                                   ` Hayes Wang
2016-11-25 13:32                                     ` Mark Lord
2016-11-25  0:27                               ` Francois Romieu
2016-11-25  3:49                                 ` Mark Lord
2016-11-25  9:53                                   ` Greg KH
2016-11-25 12:34                                     ` Mark Lord
2016-11-25 12:41                                       ` Mark Lord
2016-11-25 14:22                                         ` Greg KH
2016-11-25 14:35                                           ` Mark Lord
2016-11-25 12:49                                     ` Mark Lord
2016-11-25 14:24                                       ` Greg KH
2016-11-25 16:58                                       ` David Miller
2016-11-30 11:58                                         ` Hayes Wang
2016-12-09  3:23                                           ` Hayes Wang
2016-12-09 13:05                                             ` Mark Lord
2017-01-01  0:07                                           ` Ansis Atteka
2017-01-03  0:40                                             ` Ansis Atteka
2017-01-03 13:19                                               ` Mark Lord
2017-01-09  7:58                                               ` Hayes Wang
2019-01-05 14:14                                             ` r8152: data corruption in various scenarios Mark Lord
2019-01-05 14:22                                               ` Mark Lord
2019-01-06 19:14                                               ` Kai Heng Feng
2019-01-06 21:13                                                 ` Mark Lord
2019-01-06 21:16                                                   ` Mark Lord
2019-01-07  3:53                                                     ` Hayes Wang
2019-01-07 16:01                                                       ` Mario.Limonciello
2019-01-07 18:06                                                         ` Mark Lord
2019-01-07 18:27                                                           ` Mario.Limonciello
2019-01-07 19:24                                                             ` Mark Lord
2019-01-07  4:09                                                     ` Kai Heng Feng
2019-01-07  4:13                                                       ` Mark Lord
2019-01-07  6:46                                                         ` Kai Heng Feng
2019-01-07  7:01                                                           ` Mark Lord
2016-11-24 18:42                           ` [PATCH net 1/2] r8152: fix the sw rx checksum is unavailable Greg KH
2016-11-24 18:58                             ` Mark Lord
2016-11-25  6:31                           ` Hayes Wang
2016-11-25  6:51                             ` Hayes Wang
2016-11-25 12:35                               ` Mark Lord
2016-11-24 16:19                     ` David Miller
2016-11-24 12:37               ` Hayes Wang
2016-11-11  7:15 ` [PATCH net 2/2] r8152: rx descriptor check Hayes Wang
2016-11-11 12:13   ` Francois Romieu
2016-11-12 13:21     ` Mark Lord
2016-11-14  6:43     ` Hayes Wang
2016-11-15  1:10       ` Francois Romieu
2016-11-17  3:05         ` Hayes Wang
2016-11-13 17:39   ` David Miller
2016-11-13 20:34     ` Mark Lord
2016-11-13 20:38       ` Mark Lord
2016-11-14  7:23       ` Hayes Wang
2016-11-14 17:27         ` David Miller
2016-11-14  7:03     ` Hayes Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=23e0c132-8844-0a34-3e0b-e412f76493ba@pobox.com \
    --to=mlord@pobox.com \
    --cc=davem@davemloft.net \
    --cc=hayeswang@realtek.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nic_swsd@realtek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).