Bug #374

Fwd: [PATCH] tcp: fix TCP_MAXSEG for established IPv6 passive sockets

Added by David Taht about 1 year ago.

Status:New Start date:
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:- Spent time: -
Target version:-

Description

---------- Forwarded message ----------
From: Neal Cardwell <>
Date: Sun, Apr 22, 2012 at 12:45 PM
Subject: [PATCH] tcp: fix TCP_MAXSEG for established IPv6 passive sockets
To: David Miller <>
Cc: , Eric Dumazet <>,
Nandita Dukkipati <>, Yuchung Cheng
<>, , , Tom
Herbert <>, Neal Cardwell <>

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 <>
---
 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,

Also available in: Atom PDF