]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/can/raw.c
net/can: Use memdup_user
[net-next-2.6.git] / net / can / raw.c
index da99cf153b33737ce45a06e71fc89037b96096b3..ccfe633eec8e0df4701cd9ff4ad8b57975cb8f88 100644 (file)
@@ -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;