On Thu, May 10, 2018 at 3:45 PM, Eric Dumazet <eric.duma...@gmail.com> wrote: > > > On 05/09/2018 10:21 PM, Jon Maxwell wrote: > > ... > >> if (th->rst) >> @@ -723,11 +724,17 @@ static void tcp_v4_send_reset(const struct sock *sk, >> struct sk_buff *skb) >> arg.tos = ip_hdr(skb)->tos; >> arg.uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL); >> local_bh_disable(); >> - ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk), >> + ctl_sk = *this_cpu_ptr(net->ipv4.tcp_sk); >> + if (sk && sk->sk_state == TCP_TIME_WAIT) >> + ctl_sk->sk_mark = inet_twsk(sk)->tw_mark; >> + else if (sk && sk_fullsock(sk)) > > I do not believe we could have a non fullsock here ? >
Okay thanks I'll make these changes to v2. > A request socket (SYN_RECV state) at this point is not expected. > > > So you can factorize : > > if (sk) > ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ? > inet_twsk(sk)->tw_mark : sk->sk_mark; > > (same remark for IPv6) > > >> + ctl_sk->sk_mark = sk->sk_mark; >> + ip_send_unicast_reply(ctl_sk, >> skb, &TCP_SKB_CB(skb)->header.h4.opt, >> ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, >> &arg, arg.iov[0].iov_len); > >