| From 7922460e33c81f41e0d2421417228b32e6fdbe94 Mon Sep 17 00:00:00 2001 |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| Date: Fri, 23 Oct 2020 15:08:53 +0300 |
| Subject: vhost_vdpa: Return -EFAULT if copy_from_user() fails |
| |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| |
| commit 7922460e33c81f41e0d2421417228b32e6fdbe94 upstream. |
| |
| The copy_to/from_user() functions return the number of bytes which we |
| weren't able to copy but the ioctl should return -EFAULT if they fail. |
| |
| Fixes: a127c5bbb6a8 ("vhost-vdpa: fix backend feature ioctls") |
| Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Link: https://lore.kernel.org/r/20201023120853.GI282278@mwanda |
| Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
| Cc: stable@vger.kernel.org |
| Acked-by: Jason Wang <jasowang@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/vhost/vdpa.c | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/vhost/vdpa.c |
| +++ b/drivers/vhost/vdpa.c |
| @@ -428,12 +428,11 @@ static long vhost_vdpa_unlocked_ioctl(st |
| void __user *argp = (void __user *)arg; |
| u64 __user *featurep = argp; |
| u64 features; |
| - long r; |
| + long r = 0; |
| |
| if (cmd == VHOST_SET_BACKEND_FEATURES) { |
| - r = copy_from_user(&features, featurep, sizeof(features)); |
| - if (r) |
| - return r; |
| + if (copy_from_user(&features, featurep, sizeof(features))) |
| + return -EFAULT; |
| if (features & ~VHOST_VDPA_BACKEND_FEATURES) |
| return -EOPNOTSUPP; |
| vhost_set_backend_features(&v->vdev, features); |
| @@ -476,7 +475,8 @@ static long vhost_vdpa_unlocked_ioctl(st |
| break; |
| case VHOST_GET_BACKEND_FEATURES: |
| features = VHOST_VDPA_BACKEND_FEATURES; |
| - r = copy_to_user(featurep, &features, sizeof(features)); |
| + if (copy_to_user(featurep, &features, sizeof(features))) |
| + r = -EFAULT; |
| break; |
| default: |
| r = vhost_dev_ioctl(&v->vdev, cmd, argp); |