staging:wlan-ng: use memdup_user instead of kmalloc/copy_from_user
memdup_user() is shorter and safer equivalent of kmalloc/copy_from_user pair. Signed-off-by: Ivan Safonov <insafonov@gmail.com> Link: https://lore.kernel.org/r/20210213120527.451531-1-insafonov@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b2591ab0c9
commit
bc4bf94cc2
@ -569,24 +569,22 @@ static int p80211knetdev_do_ioctl(struct net_device *dev,
|
||||
goto bail;
|
||||
}
|
||||
|
||||
/* Allocate a buf of size req->len */
|
||||
msgbuf = kmalloc(req->len, GFP_KERNEL);
|
||||
if (msgbuf) {
|
||||
if (copy_from_user(msgbuf, (void __user *)req->data, req->len))
|
||||
result = -EFAULT;
|
||||
else
|
||||
result = p80211req_dorequest(wlandev, msgbuf);
|
||||
|
||||
if (result == 0) {
|
||||
if (copy_to_user
|
||||
((void __user *)req->data, msgbuf, req->len)) {
|
||||
result = -EFAULT;
|
||||
}
|
||||
}
|
||||
kfree(msgbuf);
|
||||
} else {
|
||||
result = -ENOMEM;
|
||||
msgbuf = memdup_user(req->data, req->len);
|
||||
if (IS_ERR(msgbuf)) {
|
||||
result = PTR_ERR(msgbuf);
|
||||
goto bail;
|
||||
}
|
||||
|
||||
result = p80211req_dorequest(wlandev, msgbuf);
|
||||
|
||||
if (result == 0) {
|
||||
if (copy_to_user
|
||||
((void __user *)req->data, msgbuf, req->len)) {
|
||||
result = -EFAULT;
|
||||
}
|
||||
}
|
||||
kfree(msgbuf);
|
||||
|
||||
bail:
|
||||
/* If allocate,copyfrom or copyto fails, return errno */
|
||||
return result;
|
||||
|
Loading…
Reference in New Issue
Block a user