aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/dccp/ipv4.c2
-rw-r--r--net/ipv4/icmp.c2
-rw-r--r--net/ipv4/ip_sockglue.c5
-rw-r--r--net/ipv4/route.c2
-rw-r--r--net/ipv4/tcp_input.c12
-rw-r--r--net/ipv4/tcp_ipv4.c24
-rw-r--r--net/sched/cls_route.c2
-rw-r--r--net/sched/em_meta.c2
-rw-r--r--net/sctp/protocol.c2
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:
1027void ipv4_pktinfo_prepare(struct sk_buff *skb) 1027void 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? */
569static int sctp_v4_skb_iif(const struct sk_buff *skb) 569static 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? */