netdev
[Top] [All Lists]

Re: [Bridge] RE: [VLAN] Re: [PATCH/RFC] Let {ip, arp}tables "see" bridg

To: "Linux 802.1Q VLAN" <vlan@xxxxxxxxxxx>
Subject: Re: [Bridge] RE: [VLAN] Re: [PATCH/RFC] Let {ip, arp}tables "see" bridged VLAN tagged{I,AR}P packets
From: Ben Greear <greearb@xxxxxxxxxxxxxxx>
Date: Wed, 08 Oct 2003 09:34:20 -0700
Cc: "'Tommy Christensen'" <tommy.christensen@xxxxxxxxx>, netdev@xxxxxxxxxxx, bridge <bridge@xxxxxxxx>
In-reply-to: <5B537508CDBED3118403009027745A210B8C14A1@knant18.kna.flextronics.com>
Organization: Candela Technologies
References: <5B537508CDBED3118403009027745A210B8C14A1@knant18.kna.flextronics.com>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5b) Gecko/20030827
Christian Darnell wrote:
-----Original Message-----

From: Tommy Christensen [mailto:tommy.christensen@xxxxxxxxx]
Sent: Wednesday, October 08, 2003 10:09 AM
To: Christian Darnell
Cc: 'Linux 802.1Q VLAN'; Bart De Schuymer; netdev@xxxxxxxxxxx; bridge
Subject: Re: [Bridge] RE: [VLAN] Re: [PATCH/RFC] Let {ip, arp}tables
"see" bridged VLAN tagged{I,AR}P packets



This is because the VLAN code is mangling shared data.
You need to do something like this:


--- linux-2.4/net/8021q/vlan_dev.c.org 2003-02-25 15:23:09.000000000 +0100 +++ linux-2.4/net/8021q/vlan_dev.c 2003-10-07 16:01:29.000000000 +0200 @@ -75,7 +75,12 @@ static inline struct sk_buff *vlan_check_reorder_header(struct sk_buff *skb) { if (VLAN_DEV_INFO(skb->dev)->flags & 1) { - skb = skb_share_check(skb, GFP_ATOMIC); + if (skb_shared(skb) || skb_cloned(skb)) { + struct sk_buff *nskb; + nskb = skb_copy(skb, GFP_ATOMIC); + kfree_skb(skb); + skb = nskb; + }

Thanks for catching that!

So, what good is skb_share_check then?
Maybe we should have a skb_share_or_cloned_check() ?

Ben


-- Ben Greear <greearb@xxxxxxxxxxxxxxx> Candela Technologies Inc http://www.candelatech.com



<Prev in Thread] Current Thread [Next in Thread>