{
        const struct iphdr *iph = ip_hdr(skb);
 
-       return __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport,
+       return __udp4_lib_lookup(dev_net(skb->dev), iph->saddr, sport,
                                 iph->daddr, dport, inet_iif(skb),
                                 udptable, skb);
 }
 struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,
                                 __be16 sport, __be16 dport)
 {
-       const struct iphdr *iph = ip_hdr(skb);
-       const struct net_device *dev =
-           skb_dst(skb) ? skb_dst(skb)->dev : skb->dev;
-
-       return __udp4_lib_lookup(dev_net(dev), iph->saddr, sport,
-                                iph->daddr, dport, inet_iif(skb),
-                                &udp_table, skb);
+       return __udp4_lib_lookup_skb(skb, sport, dport, &udp_table);
 }
 EXPORT_SYMBOL_GPL(udp4_lib_lookup_skb);
 
 
                                          __be16 sport, __be16 dport,
                                          struct udp_table *udptable)
 {
-       struct sock *sk;
        const struct ipv6hdr *iph = ipv6_hdr(skb);
+       struct sock *sk;
 
        sk = skb_steal_sock(skb);
        if (unlikely(sk))
                return sk;
-       return __udp6_lib_lookup(dev_net(skb_dst(skb)->dev), &iph->saddr, sport,
+       return __udp6_lib_lookup(dev_net(skb->dev), &iph->saddr, sport,
                                 &iph->daddr, dport, inet6_iif(skb),
                                 udptable, skb);
 }
                                 __be16 sport, __be16 dport)
 {
        const struct ipv6hdr *iph = ipv6_hdr(skb);
-       const struct net_device *dev =
-           skb_dst(skb) ? skb_dst(skb)->dev : skb->dev;
 
-       return __udp6_lib_lookup(dev_net(dev), &iph->saddr, sport,
+       return __udp6_lib_lookup(dev_net(skb->dev), &iph->saddr, sport,
                                 &iph->daddr, dport, inet6_iif(skb),
                                 &udp_table, skb);
 }