From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Vladislav Yasevich <vyasevic@redhat.com>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.14 17/37] bridge: Check if vlan filtering is enabled only once.
Date: Mon, 13 Oct 2014 04:24:14 +0200 [thread overview]
Message-ID: <20141013022401.025688717@linuxfoundation.org> (raw)
In-Reply-To: <20141013022400.286360067@linuxfoundation.org>
3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vlad Yasevich <vyasevich@gmail.com>
[ Upstream commit 20adfa1a81af00bf2027644507ad4fa9cd2849cf ]
The bridge code checks if vlan filtering is enabled on both
ingress and egress. When the state flip happens, it
is possible for the bridge to currently be forwarding packets
and forwarding behavior becomes non-deterministic. Bridge
may drop packets on some interfaces, but not others.
This patch solves this by caching the filtered state of the
packet into skb_cb on ingress. The skb_cb is guaranteed to
not be over-written between the time packet entres bridge
forwarding path and the time it leaves it. On egress, we
can then check the cached state to see if we need to
apply filtering information.
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_private.h | 3 +++
net/bridge/br_vlan.c | 15 +++++++++++----
2 files changed, 14 insertions(+), 4 deletions(-)
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -302,6 +302,9 @@ struct br_input_skb_cb {
int igmp;
int mrouters_only;
#endif
+#ifdef CONFIG_BRIDGE_VLAN_FILTERING
+ bool vlan_filtered;
+#endif
};
#define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb)
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
@@ -125,7 +125,8 @@ struct sk_buff *br_handle_vlan(struct ne
{
u16 vid;
- if (!br->vlan_enabled)
+ /* If this packet was not filtered at input, let it pass */
+ if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
goto out;
/* Vlan filter table must be configured at this point. The
@@ -163,8 +164,10 @@ bool br_allowed_ingress(struct net_bridg
/* If VLAN filtering is disabled on the bridge, all packets are
* permitted.
*/
- if (!br->vlan_enabled)
+ if (!br->vlan_enabled) {
+ BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
return true;
+ }
/* If there are no vlan in the permitted list, all packets are
* rejected.
@@ -172,6 +175,8 @@ bool br_allowed_ingress(struct net_bridg
if (!v)
goto drop;
+ BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
+
/* If vlan tx offload is disabled on bridge device and frame was
* sent from vlan device on the bridge device, it does not have
* HW accelerated vlan tag.
@@ -228,7 +233,8 @@ bool br_allowed_egress(struct net_bridge
{
u16 vid;
- if (!br->vlan_enabled)
+ /* If this packet was not filtered at input, let it pass */
+ if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
return true;
if (!v)
@@ -247,7 +253,8 @@ bool br_should_learn(struct net_bridge_p
struct net_bridge *br = p->br;
struct net_port_vlans *v;
- if (!br->vlan_enabled)
+ /* If filtering was disabled at input, let it pass. */
+ if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
return true;
v = rcu_dereference(p->vlan_info);
next prev parent reply other threads:[~2014-10-13 2:24 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-13 2:23 [PATCH 3.14 00/37] 3.14.22-stable review Greg Kroah-Hartman
2014-10-13 2:23 ` [PATCH 3.14 01/37] netlink: reset network header before passing to taps Greg Kroah-Hartman
2014-10-13 2:23 ` [PATCH 3.14 02/37] rtnetlink: fix VF info size Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 03/37] net: Always untag vlan-tagged traffic on input Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 04/37] myri10ge: check for DMA mapping errors Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 05/37] i40e: Dont stop driver probe when querying DCB config fails Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 06/37] tcp: dont use timestamp from repaired skb-s to calculate RTT (v2) Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 07/37] sit: Fix ipip6_tunnel_lookup device matching criteria Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 08/37] tcp: fix tcp_release_cb() to dispatch via address family for mtu_reduced() Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 09/37] tcp: fix ssthresh and undo for consecutive short FRTO episodes Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 10/37] packet: handle too big packets for PACKET_V3 Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 11/37] openvswitch: fix panic with multiple vlan headers Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 12/37] vxlan: fix incorrect initializer in union vxlan_addr Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 13/37] l2tp: fix race while getting PMTU on PPP pseudo-wire Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 14/37] ipv6: fix rtnl locking in setsockopt for anycast and multicast Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 15/37] bonding: fix div by zero while enslaving and transmitting Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 16/37] ipv6: restore the behavior of ipv6_sock_ac_drop() Greg Kroah-Hartman
2014-10-13 2:24 ` Greg Kroah-Hartman [this message]
2014-10-13 2:24 ` [PATCH 3.14 18/37] bridge: Fix br_should_learn to check vlan_enabled Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 19/37] net: allow macvlans to move to net namespace Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 20/37] tg3: Work around HW/FW limitations with vlan encapsulated frames Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 21/37] tg3: Allow for recieve of full-size 8021AD frames Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 22/37] xfrm: Generate blackhole routes only from route lookup functions Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 23/37] xfrm: Generate queueing " Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 24/37] macvtap: Fix race between device delete and open Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 25/37] Revert "net/macb: add pinctrl consumer support" Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 26/37] gro: fix aggregation for skb using frag_list Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 27/37] hyperv: Fix a bug in netvsc_start_xmit() Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 28/37] ip6_gre: fix flowi6_proto value in xmit path Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 29/37] team: avoid race condition in scheduling delayed work Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 30/37] sctp: handle association restarts when the socket is closed Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 31/37] tcp: fixing TLPs FIN recovery Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 32/37] USB: Add device quirk for ASUS T100 Base Station keyboard Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 33/37] USB: serial: cp210x: added Ketra N1 wireless interface support Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 34/37] USB: cp210x: add support for Seluxit USB dongle Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 35/37] usb: musb: dsps: kill OTG timer on suspend Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.14 36/37] crypto: caam - fix addressing of struct member Greg Kroah-Hartman
2014-10-14 8:31 ` Cristian Stoica
2014-10-14 8:38 ` Greg Kroah-Hartman
2014-10-14 8:48 ` Cristian Stoica
2014-10-13 2:24 ` [PATCH 3.14 37/37] serial: 8250: Add Quark X1000 to 8250_pci.c Greg Kroah-Hartman
2014-10-13 15:18 ` [PATCH 3.14 00/37] 3.14.22-stable review Guenter Roeck
2014-10-13 20:31 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141013022401.025688717@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=vyasevic@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).