diff options
author | Willy Tarreau <w@1wt.eu> | 2015-06-03 17:03:26 +0200 |
---|---|---|
committer | Willy Tarreau <w@1wt.eu> | 2015-06-03 17:12:46 +0200 |
commit | cb162b71b1c49ccc6f13ae2b74ed4703ba86d872 (patch) | |
tree | 7bedb73b4ffbe9f8fabdbfed612f479a2ec2b70c | |
parent | b473606512cb679a58f7fc0ba2775343ffdd9cbf (diff) |
net: fix incorrect backport of tcp_send_fin in 2.6.32.66
Eric forwarded this bug report happening since 2.6.32.66, found that the
backport of commit 845704a5 ("tcp: avoid looping in tcp_send_fin()") was
incorrect and proposed this patch to fix it. The bug was also reported by
starlight.2015q2@binnacle.cx who confirmed the fix.
> Date: Fri, 29 May 2015 09:12:45 +0000
> From: "bugzilla-daemon@bugzilla.kernel.org" <bugzilla-daemon@bugzilla.kernel.org>
> To: "shemminger@linux-foundation.org" <shemminger@linux-foundation.org>
> Subject: [Bug 99161] New: 2.6.32.66 PPC Oops in tcp_send_fin
>
>
> https://bugzilla.kernel.org/show_bug.cgi?id=99161
>
> Bug ID: 99161
> Summary: 2.6.32.66 PPC Oops in tcp_send_fin
> Product: Networking
> Version: 2.5
> Kernel Version: 2.6.32.66
> Hardware: PPC-32
> OS: Linux
> Tree: Mainline
> Status: NEW
> Severity: normal
> Priority: P1
> Component: IPV4
> Assignee: shemminger@linux-foundation.org
> Reporter: varenet@parisc-linux.org
> Regression: No
>
> I just updated my trusty old PPC box to longterm 2.6.32.66 (was running .65
> before that with zero issue) and it started spewing oopses at me like hell
> broke loose. This machine is primarily used as a DNS and MX (albeit under low
> pressure).
(...)
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
-rw-r--r-- | net/ipv4/tcp_output.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 5339f066234b..d1e2895bb63c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2136,7 +2136,7 @@ void tcp_send_fin(struct sock *sk) */ if (tskb && (tcp_send_head(sk) || tcp_memory_pressure)) { coalesce: - TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_FIN; + TCP_SKB_CB(tskb)->flags |= TCPCB_FLAG_FIN; TCP_SKB_CB(tskb)->end_seq++; tp->write_seq++; if (!tcp_send_head(sk)) { |