Merge tag 'v3.3-rc4' into for-3.4 in order to resolve the conflict
[firefly-linux-kernel-4.4.55.git] / net / ipv4 / tcp_ipv4.c
index 337ba4cca05214637621988cd19b423e77b05fc8..94d683a61cba45c04eb13c7882cb44bb91d0f96f 100644 (file)
@@ -651,6 +651,11 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb)
                                      arg.iov[0].iov_len, IPPROTO_TCP, 0);
        arg.csumoffset = offsetof(struct tcphdr, check) / 2;
        arg.flags = (sk && inet_sk(sk)->transparent) ? IP_REPLY_ARG_NOSRCCHECK : 0;
+       /* When socket is gone, all binding information is lost.
+        * routing might fail in this case. using iif for oif to
+        * make sure we can deliver it
+        */
+       arg.bound_dev_if = sk ? sk->sk_bound_dev_if : inet_iif(skb);
 
        net = dev_net(skb_dst(skb)->dev);
        arg.tos = ip_hdr(skb)->tos;