]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
updated version of review-2.6.36/vlan-avoid-hwaccel-vlan-packets-when-vid-not-used...
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 8 Dec 2010 23:15:49 +0000 (15:15 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 8 Dec 2010 23:15:49 +0000 (15:15 -0800)
review-2.6.36/vlan-avoid-hwaccel-vlan-packets-when-vid-not-used.patch

index 15f45e681c6f3d1497c91be56d0277bf97017501..032073137354c5d23e8570cc98a6460fc867dfb1 100644 (file)
@@ -30,8 +30,8 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
 
 ---
  net/8021q/vlan_core.c |    3 +++
- net/core/dev.c        |   13 +++++++++++++
- 2 files changed, 16 insertions(+)
+ net/core/dev.c        |   1++++++++++
+ 2 files changed, 13 insertions(+)
 
 --- a/net/8021q/vlan_core.c
 +++ b/net/8021q/vlan_core.c
@@ -47,23 +47,27 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  
 --- 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 {