summaryrefslogtreecommitdiffstats
path: root/net/can/raw.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2010-08-09 01:49:58 +0200
committerFrederic Weisbecker <fweisbec@gmail.com>2010-08-09 02:14:15 +0200
commitd9a145fb6e5f37b9903dea8371ab5c3e34e8e2d1 (patch)
treee2b4bb46fa00f0ad20447e40dba6fb21a4ae0815 /net/can/raw.c
parentautofs/autofs4: Move compat_ioctl handling into fs (diff)
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile (diff)
downloadlinux-d9a145fb6e5f37b9903dea8371ab5c3e34e8e2d1.tar.xz
linux-d9a145fb6e5f37b9903dea8371ab5c3e34e8e2d1.zip
Merge commit 'linus/master' into bkl/core
Merge reason: The staging tree has introduced the easycap driver lately. We need the latest updates to pushdown the bkl in its ioctl helper.
Diffstat (limited to 'net/can/raw.c')
-rw-r--r--net/can/raw.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/net/can/raw.c b/net/can/raw.c
index da99cf153b33..a10e3338f084 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -436,14 +436,9 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,
if (count > 1) {
/* filter does not fit into dfilter => alloc space */
- filter = kmalloc(optlen, GFP_KERNEL);
- if (!filter)
- return -ENOMEM;
-
- if (copy_from_user(filter, optval, optlen)) {
- kfree(filter);
- return -EFAULT;
- }
+ filter = memdup_user(optval, optlen);
+ if (IS_ERR(filter))
+ return PTR_ERR(filter);
} else if (count == 1) {
if (copy_from_user(&sfilter, optval, sizeof(sfilter)))
return -EFAULT;
@@ -655,6 +650,10 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
err = sock_tx_timestamp(msg, sk, skb_tx(skb));
if (err < 0)
goto free_skb;
+
+ /* to be able to check the received tx sock reference in raw_rcv() */
+ skb_tx(skb)->prevent_sk_orphan = 1;
+
skb->dev = dev;
skb->sk = sk;