Bug #374
Fwd: [PATCH] tcp: fix TCP_MAXSEG for established IPv6 passive sockets
| Status: | New | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 0% |
|
| Category: | - | Spent time: | - | |
| Target version: | - |
Description
---------- Forwarded message ----------
From: Neal Cardwell <ncardwell@google.com>
Date: Sun, Apr 22, 2012 at 12:45 PM
Subject: [PATCH] tcp: fix TCP_MAXSEG for established IPv6 passive sockets
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
Nandita Dukkipati <nanditad@google.com>, Yuchung Cheng
<ycheng@google.com>, ilpo.jarvinen@helsinki.fi, maze@google.com, Tom
Herbert <therbert@google.com>, Neal Cardwell <ncardwell@google.com>
Commit f5fff5d forgot to fix TCP_MAXSEG behavior IPv6 sockets, so IPv6
TCP server sockets that used TCP_MAXSEG would find that the advmss of
child sockets would be incorrect. This commit mirrors the advmss logic
from tcp_v4_syn_recv_sock in tcp_v6_syn_recv_sock. Eventually this
logic should probably be shared between IPv4 and IPv6, but this at
least fixes this issue.
Signed-off-by: Neal Cardwell <ncardwell@google.com>
---
net/ipv6/tcp_ipv6.c | 4 +++
1 files changed, 4 insertions(), 0 deletions(-)
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 86cfe60..98256cf 100644
--- a/net/ipv6/tcp_ipv6.c
++ b/net/ipv6/tcp_ipv6.c@ -1383,6 +1383,10 @ static struct sock *
tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
tcp_mtup_init(newsk);
tcp_sync_mss(newsk, dst_mtu(dst));
newtp->advmss = dst_metric_advmss(dst);
if (tcp_sk(sk)->rx_opt.user_mss &&
+ tcp_sk(sk)->rx_opt.user_mss < newtp->advmss)
+ newtp->advmss = tcp_sk(sk)->rx_opt.user_mss;
+
tcp_initialize_rcv_mss(newsk);
if (tcp_rsk(req)->snt_synack)
tcp_valid_rtt_meas(newsk,