X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=net%2Fcan%2Fraw.c;h=0703cba4bf9f29bc269be1fd57a0215e4f37d420;hb=7df0eb424d7f5bfb948c921500e0470f4a27c4cb;hp=27aab63df467cce099bc05ce8e1da51ef48ef666;hpb=4aa12f7b927c3cac0e0cf3503642597527d0ece0;p=linux-2.6-omap-h63xx.git diff --git a/net/can/raw.c b/net/can/raw.c index 27aab63df46..0703cba4bf9 100644 --- a/net/can/raw.c +++ b/net/can/raw.c @@ -99,13 +99,14 @@ static void raw_rcv(struct sk_buff *skb, void *data) struct raw_sock *ro = raw_sk(sk); struct sockaddr_can *addr; - if (!ro->recv_own_msgs) { - /* check the received tx sock reference */ - if (skb->sk == sk) { - kfree_skb(skb); - return; - } - } + /* check the received tx sock reference */ + if (!ro->recv_own_msgs && skb->sk == sk) + return; + + /* clone the given skb to be able to enqueue it into the rcv queue */ + skb = skb_clone(skb, GFP_ATOMIC); + if (!skb) + return; /* * Put the datagram to the queue so that raw_recvmsg() can