diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
| -rw-r--r-- | net/ipv4/tcp_ipv4.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 337ba4cca05..94d683a61cb 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -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;  |