|
@@ -312,6 +312,7 @@ static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
|
|
{
|
|
|
const struct iphdr *iph = ip_hdr(skb);
|
|
|
struct rtable *rt;
|
|
|
+ struct net_device *dev = skb->dev;
|
|
|
|
|
|
/* if ingress device is enslaved to an L3 master device pass the
|
|
|
* skb to its handler for processing
|
|
@@ -341,7 +342,7 @@ static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
|
|
*/
|
|
|
if (!skb_valid_dst(skb)) {
|
|
|
int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
|
|
|
- iph->tos, skb->dev);
|
|
|
+ iph->tos, dev);
|
|
|
if (unlikely(err)) {
|
|
|
if (err == -EXDEV)
|
|
|
__NET_INC_STATS(net, LINUX_MIB_IPRPFILTER);
|
|
@@ -370,7 +371,7 @@ static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
|
|
__IP_UPD_PO_STATS(net, IPSTATS_MIB_INBCAST, skb->len);
|
|
|
} else if (skb->pkt_type == PACKET_BROADCAST ||
|
|
|
skb->pkt_type == PACKET_MULTICAST) {
|
|
|
- struct in_device *in_dev = __in_dev_get_rcu(skb->dev);
|
|
|
+ struct in_device *in_dev = __in_dev_get_rcu(dev);
|
|
|
|
|
|
/* RFC 1122 3.3.6:
|
|
|
*
|