From: Shaohua Li <s...@fb.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 <ka...@fb.com> Signed-off-by: Shaohua Li <s...@fb.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