Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3553a52 authored by Takuya Yoshikawa's avatar Takuya Yoshikawa Committed by Michael S. Tsirkin
Browse files

vhost-net: fix to check the return value of copy_to/from_user() correctly



copy_to/from_user() returns the number of bytes that could not be copied.

So we need to check if it is not zero, and in that case, we should return
the error number -EFAULT rather than directly return the return value from
copy_to/from_user().

Signed-off-by: default avatarTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 7ad9c9d2
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -593,17 +593,17 @@ static long vhost_net_ioctl(struct file *f, unsigned int ioctl,
	int r;
	switch (ioctl) {
	case VHOST_NET_SET_BACKEND:
		r = copy_from_user(&backend, argp, sizeof backend);
		if (r < 0)
			return r;
		if (copy_from_user(&backend, argp, sizeof backend))
			return -EFAULT;
		return vhost_net_set_backend(n, backend.index, backend.fd);
	case VHOST_GET_FEATURES:
		features = VHOST_FEATURES;
		return copy_to_user(featurep, &features, sizeof features);
		if (copy_to_user(featurep, &features, sizeof features))
			return -EFAULT;
		return 0;
	case VHOST_SET_FEATURES:
		r = copy_from_user(&features, featurep, sizeof features);
		if (r < 0)
			return r;
		if (copy_from_user(&features, featurep, sizeof features))
			return -EFAULT;
		if (features & ~VHOST_FEATURES)
			return -EOPNOTSUPP;
		return vhost_net_set_features(n, features);