Since nf_bridge_maybe_copy_header() may change the length of skb,
we should check the length of skb after it to handle the ppoe skbs.

Signed-off-by: Changli Gao <[email protected]>
---
 net/bridge/br_forward.c |   16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
index 2bd11ec..ee64287 100644
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
@@ -41,17 +41,13 @@ static inline unsigned packet_length(const struct sk_buff 
*skb)
 
 int br_dev_queue_push_xmit(struct sk_buff *skb)
 {
-       /* drop mtu oversized packets except gso */
-       if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
+       /* ip_fragment doesn't copy the MAC header */
+       if (nf_bridge_maybe_copy_header(skb) ||
+           (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))) {
                kfree_skb(skb);
-       else {
-               /* ip_fragment doesn't copy the MAC header */
-               if (nf_bridge_maybe_copy_header(skb))
-                       kfree_skb(skb);
-               else {
-                       skb_push(skb, ETH_HLEN);
-                       dev_queue_xmit(skb);
-               }
+       } else {
+               skb_push(skb, ETH_HLEN);
+               dev_queue_xmit(skb);
        }
 
        return 0;
_______________________________________________
Bridge mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/bridge

Reply via email to