diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
| -rw-r--r-- | net/ipv4/tcp_ipv4.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 42b2a6a73092..272241f16fcb 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
| @@ -1627,9 +1627,6 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
| 1627 | sk->sk_rx_dst = NULL; | 1627 | sk->sk_rx_dst = NULL; |
| 1628 | } | 1628 | } |
| 1629 | } | 1629 | } |
| 1630 | if (unlikely(sk->sk_rx_dst == NULL)) | ||
| 1631 | inet_sk_rx_dst_set(sk, skb); | ||
| 1632 | |||
| 1633 | if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len)) { | 1630 | if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len)) { |
| 1634 | rsk = sk; | 1631 | rsk = sk; |
| 1635 | goto reset; | 1632 | goto reset; |
| @@ -1872,10 +1869,20 @@ static struct timewait_sock_ops tcp_timewait_sock_ops = { | |||
| 1872 | .twsk_destructor= tcp_twsk_destructor, | 1869 | .twsk_destructor= tcp_twsk_destructor, |
| 1873 | }; | 1870 | }; |
| 1874 | 1871 | ||
| 1872 | static void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) | ||
| 1873 | { | ||
| 1874 | struct dst_entry *dst = skb_dst(skb); | ||
| 1875 | |||
| 1876 | dst_hold(dst); | ||
| 1877 | sk->sk_rx_dst = dst; | ||
| 1878 | inet_sk(sk)->rx_dst_ifindex = skb->skb_iif; | ||
| 1879 | } | ||
| 1880 | |||
| 1875 | const struct inet_connection_sock_af_ops ipv4_specific = { | 1881 | const struct inet_connection_sock_af_ops ipv4_specific = { |
| 1876 | .queue_xmit = ip_queue_xmit, | 1882 | .queue_xmit = ip_queue_xmit, |
| 1877 | .send_check = tcp_v4_send_check, | 1883 | .send_check = tcp_v4_send_check, |
| 1878 | .rebuild_header = inet_sk_rebuild_header, | 1884 | .rebuild_header = inet_sk_rebuild_header, |
| 1885 | .sk_rx_dst_set = inet_sk_rx_dst_set, | ||
| 1879 | .conn_request = tcp_v4_conn_request, | 1886 | .conn_request = tcp_v4_conn_request, |
| 1880 | .syn_recv_sock = tcp_v4_syn_recv_sock, | 1887 | .syn_recv_sock = tcp_v4_syn_recv_sock, |
| 1881 | .net_header_len = sizeof(struct iphdr), | 1888 | .net_header_len = sizeof(struct iphdr), |
