diff mbox series

[net] tcp: remove buggy call to tcp_v6_restore_cb()

Message ID 1512006237.19682.6.camel@gmail.com
State Accepted, archived
Delegated to: David Miller
Headers show
Series [net] tcp: remove buggy call to tcp_v6_restore_cb() | expand

Commit Message

Eric Dumazet Nov. 30, 2017, 1:43 a.m. UTC
From: Eric Dumazet <edumazet@google.com>

tcp_v6_send_reset() expects to receive an skb with skb->cb[] layout as
used in TCP stack.
MD5 lookup uses tcp_v6_iif() and tcp_v6_sdif() and thus
TCP_SKB_CB(skb)->header.h6

This patch probably fixes RST packets sent on behalf of a timewait md5
ipv6 socket.

Before Florian patch, tcp_v6_restore_cb() was needed before jumping to
no_tcp_socket label.

Fixes: 271c3b9b7bda ("tcp: honour SO_BINDTODEVICE for TW_RST case too")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Florian Westphal <fw@strlen.de>
---
 net/ipv6/tcp_ipv6.c |    1 -
 1 file changed, 1 deletion(-)

Comments

Florian Westphal Nov. 30, 2017, 8:14 a.m. UTC | #1
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> From: Eric Dumazet <edumazet@google.com>
> 
> tcp_v6_send_reset() expects to receive an skb with skb->cb[] layout as
> used in TCP stack.
> MD5 lookup uses tcp_v6_iif() and tcp_v6_sdif() and thus
> TCP_SKB_CB(skb)->header.h6

Indeed, thanks for fixing this up.

Acked-by: Florian Westphal <fw@strlen.de>
David Miller Nov. 30, 2017, 3:22 p.m. UTC | #2
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Wed, 29 Nov 2017 17:43:57 -0800

> From: Eric Dumazet <edumazet@google.com>
> 
> tcp_v6_send_reset() expects to receive an skb with skb->cb[] layout as
> used in TCP stack.
> MD5 lookup uses tcp_v6_iif() and tcp_v6_sdif() and thus
> TCP_SKB_CB(skb)->header.h6
> 
> This patch probably fixes RST packets sent on behalf of a timewait md5
> ipv6 socket.
> 
> Before Florian patch, tcp_v6_restore_cb() was needed before jumping to
> no_tcp_socket label.
> 
> Fixes: 271c3b9b7bda ("tcp: honour SO_BINDTODEVICE for TW_RST case too")
> Signed-off-by: Eric Dumazet <edumazet@google.com>

Applied and queued up for -stable.
diff mbox series

Patch

diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 6bb98c93edfe2ed2f16fe5229605f8108cfc7f9a..be11dc13aa705145a83177e17d23594e9416e11a 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1590,7 +1590,6 @@  static int tcp_v6_rcv(struct sk_buff *skb)
 		tcp_v6_timewait_ack(sk, skb);
 		break;
 	case TCP_TW_RST:
-		tcp_v6_restore_cb(skb);
 		tcp_v6_send_reset(sk, skb);
 		inet_twsk_deschedule_put(inet_twsk(sk));
 		goto discard_it;