diff options
Diffstat (limited to 'net/bridge/br_input.c')
| -rw-r--r-- | net/bridge/br_input.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 3a8a015c92e0..3cedd4eeeed6 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
| @@ -126,6 +126,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
| 126 | if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) | 126 | if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) |
| 127 | goto drop; | 127 | goto drop; |
| 128 | 128 | ||
| 129 | skb = skb_share_check(skb, GFP_ATOMIC); | ||
| 130 | if (!skb) | ||
| 131 | return NULL; | ||
| 132 | |||
| 129 | if (unlikely(is_link_local(dest))) { | 133 | if (unlikely(is_link_local(dest))) { |
| 130 | /* Pause frames shouldn't be passed up by driver anyway */ | 134 | /* Pause frames shouldn't be passed up by driver anyway */ |
| 131 | if (skb->protocol == htons(ETH_P_PAUSE)) | 135 | if (skb->protocol == htons(ETH_P_PAUSE)) |
| @@ -145,7 +149,7 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
| 145 | case BR_STATE_FORWARDING: | 149 | case BR_STATE_FORWARDING: |
| 146 | 150 | ||
| 147 | if (br_should_route_hook) { | 151 | if (br_should_route_hook) { |
| 148 | if (br_should_route_hook(&skb)) | 152 | if (br_should_route_hook(skb)) |
| 149 | return skb; | 153 | return skb; |
| 150 | dest = eth_hdr(skb)->h_dest; | 154 | dest = eth_hdr(skb)->h_dest; |
| 151 | } | 155 | } |
