bridge: Fix br_should_learn to check vlan_enabled
authorVlad Yasevich <vyasevich@gmail.com>
Mon, 15 Sep 2014 19:24:26 +0000 (15:24 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Oct 2014 06:36:41 +0000 (08:36 +0200)
[ Upstream commit c095f248e63ada504dd90c90baae673ae10ee3fe ]

As Toshiaki Makita pointed out, the BRIDGE_INPUT_SKB_CB will
not be initialized in br_should_learn() as that function
is called only from br_handle_local_finish().  That is
an input handler for link-local ethernet traffic so it perfectly
correct to check br->vlan_enabled here.

Reported-by: Toshiaki Makita<toshiaki.makita1@gmail.com>
Fixes: 20adfa1 bridge: Check if vlan filtering is enabled only once.
Signed-off-by: Vladislav Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/bridge/br_vlan.c

index 2b069fe..e1bd253 100644 (file)
@@ -254,7 +254,7 @@ bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid)
        struct net_port_vlans *v;
 
        /* If filtering was disabled at input, let it pass. */
-       if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
+       if (!br->vlan_enabled)
                return true;
 
        v = rcu_dereference(p->vlan_info);