Commit 7922460e authored by Dan Carpenter's avatar Dan Carpenter Committed by Michael S. Tsirkin
Browse files

vhost_vdpa: Return -EFAULT if copy_from_user() fails



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: a127c5bb ("vhost-vdpa: fix backend feature ioctls")
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Link: https://lore.kernel.org/r/20201023120853.GI282278@mwanda


Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Cc: stable@vger.kernel.org
Acked-by: default avatarJason Wang <jasowang@redhat.com>
parent 70a62fce
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -432,12 +432,11 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,
	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);
@@ -480,7 +479,8 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,
		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;
	case VHOST_VDPA_GET_IOVA_RANGE:
		r = vhost_vdpa_get_iova_range(v, argp);