diff options
author | Eric Dumazet <edumazet@google.com> | 2013-10-15 20:54:30 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-10-17 22:08:08 +0200 |
commit | c52e2421f7368fd36cbe330d2cf41b10452e39a9 (patch) | |
tree | 337ead817a96c313068b3d4b0c4f844ef23014f9 /arch/.gitignore | |
parent | Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/lin... (diff) | |
download | linux-c52e2421f7368fd36cbe330d2cf41b10452e39a9.tar.xz linux-c52e2421f7368fd36cbe330d2cf41b10452e39a9.zip |
tcp: must unclone packets before mangling them
TCP stack should make sure it owns skbs before mangling them.
We had various crashes using bnx2x, and it turned out gso_size
was cleared right before bnx2x driver was populating TC descriptor
of the _previous_ packet send. TCP stack can sometime retransmit
packets that are still in Qdisc.
Of course we could make bnx2x driver more robust (using
ACCESS_ONCE(shinfo->gso_size) for example), but the bug is TCP stack.
We have identified two points where skb_unclone() was needed.
This patch adds a WARN_ON_ONCE() to warn us if we missed another
fix of this kind.
Kudos to Neal for finding the root cause of this bug. Its visible
using small MSS.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/.gitignore')
0 files changed, 0 insertions, 0 deletions