[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <b20c7b756a507786dbbe2127b3c014954a1587fd.1513652093.git.shli@fb.com>
Date: Mon, 18 Dec 2017 18:58:25 -0800
From: Shaohua Li <shli@...nel.org>
To: netdev@...r.kernel.org, davem@...emloft.net
Cc: Kernel Team <Kernel-team@...com>, Shaohua Li <shli@...com>,
Martin KaFai Lau <kafai@...com>
Subject: [PATCH net] net: always reevalulate autoflowlabel setting for reset packet
From: Shaohua Li <shli@...com>
ipv6_pinfo.autoflowlabel is set in sock creation. Later if we change
sysctl.ip6.auto_flowlabels, the ipv6_pinfo.autoflowlabel isn't changed,
so the sock will keep the old behavior in terms of auto flowlabel. Reset
packet is suffering from this problem, because reset packset is sent
from a special control socket, which is created at boot time. Since
sysctl.ipv6.auto_flowlabels is 2 by default, the control socket will
always have its ipv6_pinfo.autoflowlabel set, even after user set
sysctl.ipv6.auto_flowlabels to 1, so reset packset will always have
flowlabel.
To fix this, we always reevaluate autoflowlabel setting for reset
packet. Normal sock has the same issue too, but since the
sysctl.ipv6.auto_flowlabels is usually set at host startup, this isn't a
big issue for normal sock.
Cc: Martin KaFai Lau <kafai@...com>
Signed-off-by: Shaohua Li <shli@...com>
---
net/ipv6/tcp_ipv6.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 7178476..fc35233 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -789,7 +789,9 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32
unsigned int tot_len = sizeof(struct tcphdr);
struct dst_entry *dst;
__be32 *topt;
+ struct ipv6_pinfo *np = inet6_sk(ctl_sk);
+ np->autoflowlabel = ip6_default_np_autolabel(net);
if (tsecr)
tot_len += TCPOLEN_TSTAMP_ALIGNED;
#ifdef CONFIG_TCP_MD5SIG
--
2.9.5
Powered by blists - more mailing lists