summaryrefslogtreecommitdiffstats
path: root/net/can/raw.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-01-15 18:27:20 +0100
committerTakashi Iwai <tiwai@suse.de>2009-01-15 18:27:20 +0100
commitc0106d72b8d71696dbe9dc80e2c77d4ac63f7531 (patch)
treeca96d2baecb0555e36219ed6968dc8e306e530ca /net/can/raw.c
parent5852973c129cf7c7e6c229abb7250673fc2a50c9 (diff)
parenteff317d0834ad1ff03f747f6bc2d76b9a9c95160 (diff)
downloadkernel-crypto-c0106d72b8d71696dbe9dc80e2c77d4ac63f7531.tar.gz
kernel-crypto-c0106d72b8d71696dbe9dc80e2c77d4ac63f7531.tar.xz
kernel-crypto-c0106d72b8d71696dbe9dc80e2c77d4ac63f7531.zip
Merge branch 'topic/asoc' into next/asoc
Diffstat (limited to 'net/can/raw.c')
-rw-r--r--net/can/raw.c15
1 files changed, 8 insertions, 7 deletions
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