diff options
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_input.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 5662567c8aed..420bbb9955e9 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
@@ -136,8 +136,14 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
136 | if (skb->protocol == htons(ETH_P_PAUSE)) | 136 | if (skb->protocol == htons(ETH_P_PAUSE)) |
137 | goto drop; | 137 | goto drop; |
138 | 138 | ||
139 | return (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev, | 139 | /* Process STP BPDU's through normal netif_receive_skb() path */ |
140 | NULL, br_handle_local_finish) == 0) ? skb : NULL; | 140 | if (p->br->stp_enabled != BR_NO_STP) { |
141 | if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev, | ||
142 | NULL, br_handle_local_finish)) | ||
143 | return NULL; | ||
144 | else | ||
145 | return skb; | ||
146 | } | ||
141 | } | 147 | } |
142 | 148 | ||
143 | switch (p->state) { | 149 | switch (p->state) { |