ipv4: icmp: Eliminate remaining uses of rt->rt_src
authorDavid S. Miller <davem@davemloft.net>
Mon, 9 May 2011 20:28:22 +0000 (13:28 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 10 May 2011 20:32:46 +0000 (13:32 -0700)
On input packets, rt->rt_src always equals ip_hdr(skb)->saddr

Anything that mangles or otherwise changes the IP header must
relookup the route found at skb_rtable().  Therefore this
invariant must always hold true.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/icmp.c

index 853a670f6df6b19288608c3a2c409713bb5089d2..3314394f0aab445892020b9d1a2cdc309471d1bd 100644 (file)
@@ -345,7 +345,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
        icmp_param->data.icmph.checksum = 0;
 
        inet->tos = ip_hdr(skb)->tos;
-       daddr = ipc.addr = rt->rt_src;
+       daddr = ipc.addr = ip_hdr(skb)->saddr;
        ipc.opt = NULL;
        ipc.tx_flags = 0;
        if (icmp_param->replyopts.opt.opt.optlen) {
@@ -930,12 +930,12 @@ static void icmp_address_reply(struct sk_buff *skb)
                BUG_ON(mp == NULL);
                for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
                        if (*mp == ifa->ifa_mask &&
-                           inet_ifa_match(rt->rt_src, ifa))
+                           inet_ifa_match(ip_hdr(skb)->saddr, ifa))
                                break;
                }
                if (!ifa && net_ratelimit()) {
                        printk(KERN_INFO "Wrong address mask %pI4 from %s/%pI4\n",
-                              mp, dev->name, &rt->rt_src);
+                              mp, dev->name, &ip_hdr(skb)->saddr);
                }
        }
 }