dev: move skb_scrub_packet() after eth_type_trans()
authorNicolas Dichtel <nicolas.dichtel@6wind.com>
Tue, 13 Aug 2013 15:51:09 +0000 (17:51 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Aug 2013 08:00:20 +0000 (01:00 -0700)
skb_scrub_packet() was called before eth_type_trans() to let eth_type_trans()
set pkt_type.

In fact, we should force pkt_type to PACKET_HOST, so move the call after
eth_type_trans().

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c
net/ipv4/ip_tunnel.c

index 58eb802584b99453822c2db9f07106db3d510918..1ed2b66a10a6009c219292b17b4046e3e970f15b 100644 (file)
@@ -1691,13 +1691,13 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
                kfree_skb(skb);
                return NET_RX_DROP;
        }
-       skb_scrub_packet(skb);
        skb->protocol = eth_type_trans(skb, dev);
 
        /* eth_type_trans() can set pkt_type.
-        * clear pkt_type _after_ calling eth_type_trans()
+        * call skb_scrub_packet() after it to clear pkt_type _after_ calling
+        * eth_type_trans().
         */
-       skb->pkt_type = PACKET_HOST;
+       skb_scrub_packet(skb);
 
        return netif_rx(skb);
 }
index 9fdf8a6d95f314fb5475a1235bcdcefc55eea0eb..fbc1094964bf57d86388646b0d19f1db923dcbb0 100644 (file)
@@ -454,15 +454,16 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
        tstats->rx_bytes += skb->len;
        u64_stats_update_end(&tstats->syncp);
 
-       if (tunnel->net != dev_net(tunnel->dev))
-               skb_scrub_packet(skb);
-
        if (tunnel->dev->type == ARPHRD_ETHER) {
                skb->protocol = eth_type_trans(skb, tunnel->dev);
                skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
        } else {
                skb->dev = tunnel->dev;
        }
+
+       if (tunnel->net != dev_net(tunnel->dev))
+               skb_scrub_packet(skb);
+
        gro_cells_receive(&tunnel->gro_cells, skb);
        return 0;