diff --git a/[refs] b/[refs] index 455d9d681707..fb8e29067ec0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d7fd1b5747fff3bde92777bcaf705d98ae6f8b6f +refs/heads/master: 16dff91804777efbb0ce18b0a7e54c55e86b7beb diff --git a/trunk/net/can/raw.c b/trunk/net/can/raw.c index da99cf153b33..ccfe633eec8e 100644 --- a/trunk/net/can/raw.c +++ b/trunk/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;