diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c index 81f39c315947..c39d031c4aa6 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c @@ -1912,13 +1912,9 @@ static int r871x_mp_ioctl_hdl(struct net_device *dev, bset = (u8)(p->flags & 0xFFFF); len = p->length; pparmbuf = NULL; - pparmbuf = kmalloc(len, GFP_ATOMIC); - if (pparmbuf == NULL) { - ret = -ENOMEM; - goto _r871x_mp_ioctl_hdl_exit; - } - if (copy_from_user(pparmbuf, p->pointer, len)) { - ret = -EFAULT; + pparmbuf = memdup_user(p->pointer, len); + if (IS_ERR(pparmbuf)) { + ret = PTR_ERR(pparmbuf); goto _r871x_mp_ioctl_hdl_exit; } poidparam = (struct mp_ioctl_param *)pparmbuf;