Skip to content

Commit

Permalink
dev: move skb_scrub_packet() after eth_type_trans()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nicolas Dichtel authored and David S. Miller committed Aug 15, 2013
1 parent fc4eba5 commit 64261f2
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 6 deletions.
6 changes: 3 additions & 3 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
7 changes: 4 additions & 3 deletions net/ipv4/ip_tunnel.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit 64261f2

Please sign in to comment.