diff --git a/[refs] b/[refs] index 651ce6c15f99..cc3c57660d11 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 939cf3069d31a6e0e335eb5e08ef04895f2d013d +refs/heads/master: 1ff1986fc94ee711df3cf19d45f2abf351436a6d diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index ead0366ee1e4..be7ee506f17a 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -2529,6 +2529,7 @@ void __skb_get_rxhash(struct sk_buff *skb) int nhoff, hash = 0, poff; const struct ipv6hdr *ip6; const struct iphdr *ip; + const struct vlan_hdr *vlan; u8 ip_proto; u32 addr1, addr2; u16 proto; @@ -2565,6 +2566,13 @@ void __skb_get_rxhash(struct sk_buff *skb) addr2 = (__force u32) ip6->daddr.s6_addr32[3]; nhoff += 40; break; + case __constant_htons(ETH_P_8021Q): + if (!pskb_may_pull(skb, sizeof(*vlan) + nhoff)) + goto done; + vlan = (const struct vlan_hdr *) (skb->data + nhoff); + proto = vlan->h_vlan_encapsulated_proto; + nhoff += sizeof(*vlan); + goto again; default: goto done; }