[DCCP]: Use skb_set_owner_w in dccp_transmit_skb when skb->sk is NULL
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 14 Oct 2005 06:38:49 +0000 (16:38 +1000)
committerArnaldo Carvalho de Melo <acme@mandriva.com>
Thu, 20 Oct 2005 16:25:28 +0000 (14:25 -0200)
David S. Miller <davem@davemloft.net> wrote:
> One thing you can probably do for this bug is to mark data packets
> explicitly somehow, perhaps in the SKB control block DCCP already
> uses for other data.  Put some boolean in there, set it true for
> data packets.  Then change the test in dccp_transmit_skb() as
> appropriate to test the boolean flag instead of "skb_cloned(skb)".

I agree.  In fact we already have that flag, it's called skb->sk.
So here is patch to test that instead of skb_cloned().

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Acked-by: Ian McDonald <imcdnzl@gmail.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
net/dccp/output.c

index 4786bdcddcc92a4082b3dc7d30d77560b171e541..946ec2db75de74a1170657e7e5f5f591ec35ce4a 100644 (file)
@@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
                
                skb->h.raw = skb_push(skb, dccp_header_size);
                dh = dccp_hdr(skb);
                
                skb->h.raw = skb_push(skb, dccp_header_size);
                dh = dccp_hdr(skb);
-               /*
-                * Data packets are not cloned as they are never retransmitted
-                */
-               if (skb_cloned(skb))
+
+               if (!skb->sk)
                        skb_set_owner_w(skb, sk);
 
                /* Build DCCP header and checksum it. */
                        skb_set_owner_w(skb, sk);
 
                /* Build DCCP header and checksum it. */