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@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
Organization: Candela Technologies
References: <5B537508CDBED3118403009027745A210B8C14A1@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
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>