diff options
Diffstat (limited to 'net/bridge/br_forward.c')
-rw-r--r-- | net/bridge/br_forward.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 8be9f2123e54..864fbbc7b24d 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c | |||
@@ -35,16 +35,20 @@ static inline unsigned packet_length(const struct sk_buff *skb) | |||
35 | int br_dev_queue_push_xmit(struct sk_buff *skb) | 35 | int br_dev_queue_push_xmit(struct sk_buff *skb) |
36 | { | 36 | { |
37 | /* drop mtu oversized packets except gso */ | 37 | /* drop mtu oversized packets except gso */ |
38 | if (packet_length(skb) > skb->dev->mtu && !skb_shinfo(skb)->gso_size) | 38 | if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb)) |
39 | kfree_skb(skb); | 39 | kfree_skb(skb); |
40 | else { | 40 | else { |
41 | #ifdef CONFIG_BRIDGE_NETFILTER | 41 | #ifdef CONFIG_BRIDGE_NETFILTER |
42 | /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */ | 42 | /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */ |
43 | nf_bridge_maybe_copy_header(skb); | 43 | if (nf_bridge_maybe_copy_header(skb)) |
44 | kfree_skb(skb); | ||
45 | else | ||
44 | #endif | 46 | #endif |
45 | skb_push(skb, ETH_HLEN); | 47 | { |
48 | skb_push(skb, ETH_HLEN); | ||
46 | 49 | ||
47 | dev_queue_xmit(skb); | 50 | dev_queue_xmit(skb); |
51 | } | ||
48 | } | 52 | } |
49 | 53 | ||
50 | return 0; | 54 | return 0; |