diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/dccp/ipv4.c | 2 | ||||
-rw-r--r-- | net/ipv4/icmp.c | 2 | ||||
-rw-r--r-- | net/ipv4/ip_sockglue.c | 5 | ||||
-rw-r--r-- | net/ipv4/route.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 12 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 24 | ||||
-rw-r--r-- | net/sched/cls_route.c | 2 | ||||
-rw-r--r-- | net/sched/em_meta.c | 2 | ||||
-rw-r--r-- | net/sctp/protocol.c | 2 |
9 files changed, 26 insertions, 27 deletions
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index 25428d0c50c9..176ecdba4a22 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
@@ -481,7 +481,7 @@ static struct dst_entry* dccp_v4_route_skb(struct net *net, struct sock *sk, | |||
481 | struct rtable *rt; | 481 | struct rtable *rt; |
482 | const struct iphdr *iph = ip_hdr(skb); | 482 | const struct iphdr *iph = ip_hdr(skb); |
483 | struct flowi4 fl4 = { | 483 | struct flowi4 fl4 = { |
484 | .flowi4_oif = skb_rtable(skb)->rt_iif, | 484 | .flowi4_oif = inet_iif(skb), |
485 | .daddr = iph->saddr, | 485 | .daddr = iph->saddr, |
486 | .saddr = iph->daddr, | 486 | .saddr = iph->daddr, |
487 | .flowi4_tos = RT_CONN_FLAGS(sk), | 487 | .flowi4_tos = RT_CONN_FLAGS(sk), |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index f2a06beffbd3..f2eccd531746 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -571,7 +571,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info) | |||
571 | rcu_read_lock(); | 571 | rcu_read_lock(); |
572 | if (rt_is_input_route(rt) && | 572 | if (rt_is_input_route(rt) && |
573 | net->ipv4.sysctl_icmp_errors_use_inbound_ifaddr) | 573 | net->ipv4.sysctl_icmp_errors_use_inbound_ifaddr) |
574 | dev = dev_get_by_index_rcu(net, rt->rt_iif); | 574 | dev = dev_get_by_index_rcu(net, inet_iif(skb_in)); |
575 | 575 | ||
576 | if (dev) | 576 | if (dev) |
577 | saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK); | 577 | saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK); |
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index de29f46f68b0..5eea4a811042 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c | |||
@@ -1027,10 +1027,9 @@ e_inval: | |||
1027 | void ipv4_pktinfo_prepare(struct sk_buff *skb) | 1027 | void ipv4_pktinfo_prepare(struct sk_buff *skb) |
1028 | { | 1028 | { |
1029 | struct in_pktinfo *pktinfo = PKTINFO_SKB_CB(skb); | 1029 | struct in_pktinfo *pktinfo = PKTINFO_SKB_CB(skb); |
1030 | const struct rtable *rt = skb_rtable(skb); | ||
1031 | 1030 | ||
1032 | if (rt) { | 1031 | if (skb_rtable(skb)) { |
1033 | pktinfo->ipi_ifindex = rt->rt_iif; | 1032 | pktinfo->ipi_ifindex = inet_iif(skb); |
1034 | pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb); | 1033 | pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb); |
1035 | } else { | 1034 | } else { |
1036 | pktinfo->ipi_ifindex = 0; | 1035 | pktinfo->ipi_ifindex = 0; |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 34017be87c85..f6be78119396 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -848,7 +848,7 @@ void ip_rt_send_redirect(struct sk_buff *skb) | |||
848 | if (log_martians && | 848 | if (log_martians && |
849 | peer->rate_tokens == ip_rt_redirect_number) | 849 | peer->rate_tokens == ip_rt_redirect_number) |
850 | net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n", | 850 | net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n", |
851 | &ip_hdr(skb)->saddr, rt->rt_iif, | 851 | &ip_hdr(skb)->saddr, inet_iif(skb), |
852 | &ip_hdr(skb)->daddr, &rt->rt_gateway); | 852 | &ip_hdr(skb)->daddr, &rt->rt_gateway); |
853 | #endif | 853 | #endif |
854 | } | 854 | } |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 21d7f8f3a7a5..3e07a64ca44e 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -5391,18 +5391,6 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb, | |||
5391 | { | 5391 | { |
5392 | struct tcp_sock *tp = tcp_sk(sk); | 5392 | struct tcp_sock *tp = tcp_sk(sk); |
5393 | 5393 | ||
5394 | if (sk->sk_rx_dst) { | ||
5395 | struct dst_entry *dst = sk->sk_rx_dst; | ||
5396 | if (unlikely(dst->obsolete)) { | ||
5397 | if (dst->ops->check(dst, 0) == NULL) { | ||
5398 | dst_release(dst); | ||
5399 | sk->sk_rx_dst = NULL; | ||
5400 | } | ||
5401 | } | ||
5402 | } | ||
5403 | if (unlikely(sk->sk_rx_dst == NULL)) | ||
5404 | sk->sk_rx_dst = dst_clone(skb_dst(skb)); | ||
5405 | |||
5406 | /* | 5394 | /* |
5407 | * Header prediction. | 5395 | * Header prediction. |
5408 | * The code loosely follows the one in the famous | 5396 | * The code loosely follows the one in the famous |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index bc5432e3c778..3e30548ac32a 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -1618,6 +1618,20 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
1618 | 1618 | ||
1619 | if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */ | 1619 | if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */ |
1620 | sock_rps_save_rxhash(sk, skb); | 1620 | sock_rps_save_rxhash(sk, skb); |
1621 | if (sk->sk_rx_dst) { | ||
1622 | struct dst_entry *dst = sk->sk_rx_dst; | ||
1623 | if (dst->ops->check(dst, 0) == NULL) { | ||
1624 | dst_release(dst); | ||
1625 | sk->sk_rx_dst = NULL; | ||
1626 | } | ||
1627 | } | ||
1628 | if (unlikely(sk->sk_rx_dst == NULL)) { | ||
1629 | struct inet_sock *icsk = inet_sk(sk); | ||
1630 | struct rtable *rt = skb_rtable(skb); | ||
1631 | |||
1632 | sk->sk_rx_dst = dst_clone(&rt->dst); | ||
1633 | icsk->rx_dst_ifindex = inet_iif(skb); | ||
1634 | } | ||
1621 | if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len)) { | 1635 | if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len)) { |
1622 | rsk = sk; | 1636 | rsk = sk; |
1623 | goto reset; | 1637 | goto reset; |
@@ -1700,14 +1714,12 @@ void tcp_v4_early_demux(struct sk_buff *skb) | |||
1700 | skb->destructor = sock_edemux; | 1714 | skb->destructor = sock_edemux; |
1701 | if (sk->sk_state != TCP_TIME_WAIT) { | 1715 | if (sk->sk_state != TCP_TIME_WAIT) { |
1702 | struct dst_entry *dst = sk->sk_rx_dst; | 1716 | struct dst_entry *dst = sk->sk_rx_dst; |
1717 | struct inet_sock *icsk = inet_sk(sk); | ||
1703 | if (dst) | 1718 | if (dst) |
1704 | dst = dst_check(dst, 0); | 1719 | dst = dst_check(dst, 0); |
1705 | if (dst) { | 1720 | if (dst && |
1706 | struct rtable *rt = (struct rtable *) dst; | 1721 | icsk->rx_dst_ifindex == dev->ifindex) |
1707 | 1722 | skb_dst_set_noref(skb, dst); | |
1708 | if (rt->rt_iif == dev->ifindex) | ||
1709 | skb_dst_set_noref(skb, dst); | ||
1710 | } | ||
1711 | } | 1723 | } |
1712 | } | 1724 | } |
1713 | } | 1725 | } |
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c index 36fec4227401..44f405cb9aaf 100644 --- a/net/sched/cls_route.c +++ b/net/sched/cls_route.c | |||
@@ -143,7 +143,7 @@ static int route4_classify(struct sk_buff *skb, const struct tcf_proto *tp, | |||
143 | if (head == NULL) | 143 | if (head == NULL) |
144 | goto old_method; | 144 | goto old_method; |
145 | 145 | ||
146 | iif = ((struct rtable *)dst)->rt_iif; | 146 | iif = inet_iif(skb); |
147 | 147 | ||
148 | h = route4_fastmap_hash(id, iif); | 148 | h = route4_fastmap_hash(id, iif); |
149 | if (id == head->fastmap[h].id && | 149 | if (id == head->fastmap[h].id && |
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c index 4790c696cbce..4ab6e3325573 100644 --- a/net/sched/em_meta.c +++ b/net/sched/em_meta.c | |||
@@ -264,7 +264,7 @@ META_COLLECTOR(int_rtiif) | |||
264 | if (unlikely(skb_rtable(skb) == NULL)) | 264 | if (unlikely(skb_rtable(skb) == NULL)) |
265 | *err = -1; | 265 | *err = -1; |
266 | else | 266 | else |
267 | dst->value = skb_rtable(skb)->rt_iif; | 267 | dst->value = inet_iif(skb); |
268 | } | 268 | } |
269 | 269 | ||
270 | /************************************************************************** | 270 | /************************************************************************** |
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 9c90811d1134..1f89c4e69645 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -568,7 +568,7 @@ static void sctp_v4_get_saddr(struct sctp_sock *sk, | |||
568 | /* What interface did this skb arrive on? */ | 568 | /* What interface did this skb arrive on? */ |
569 | static int sctp_v4_skb_iif(const struct sk_buff *skb) | 569 | static int sctp_v4_skb_iif(const struct sk_buff *skb) |
570 | { | 570 | { |
571 | return skb_rtable(skb)->rt_iif; | 571 | return inet_iif(skb); |
572 | } | 572 | } |
573 | 573 | ||
574 | /* Was this packet marked by Explicit Congestion Notification? */ | 574 | /* Was this packet marked by Explicit Congestion Notification? */ |