---
net/8021q/vlan_core.c | 3 +++
- net/core/dev.c | 13 +++++++++++++
- 2 files changed, 16 insertions(+)
+ net/core/dev.c | 10 ++++++++++
+ 2 files changed, 13 insertions(+)
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -2891,6 +2891,19 @@ static int __netif_receive_skb(struct sk
+@@ -2891,6 +2891,15 @@ static int __netif_receive_skb(struct sk
ncls:
#endif
+ /* If we got this far with a hardware accelerated VLAN tag, it means
+ * that we were put in promiscuous mode but nobody is interested in
-+ * this vid. Drop the packet now to prevent it from getting propagated
++ * this vid. Drop the packet now to prevent it from getting propagated
+ * to other parts of the stack that won't know how to deal with packets
+ * tagged in this manner.
+ */
-+ if (unlikely(vlan_tx_tag_present(skb))) {
-+ if (pt_prev)
-+ ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
-+ kfree_skb(skb);
-+ goto out;
-+ }
++ if (unlikely(vlan_tx_tag_present(skb)))
++ goto bypass;
+
/* Handle special case of bridge or macvlan */
rx_handler = rcu_dereference(skb->dev->rx_handler);
if (rx_handler) {
+@@ -2927,6 +2936,7 @@ ncls:
+ }
+ }
+
++bypass:
+ if (pt_prev) {
+ ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
+ } else {