FAILED: patch "[PATCH] vhost: Don't call access_ok() when using IOTLB" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0210a8db2aeca393fb3067e234967877e3146266 Mon Sep 17 00:00:00 2001
From: Greg Kurz <[email protected]>
Date: Sat, 3 Oct 2020 12:01:52 +0200
Subject: [PATCH] vhost: Don't call access_ok() when using IOTLB
When the IOTLB device is enabled, the vring addresses we get from userspace are GIOVAs. It is thus wrong to pass them down to access_ok() which only takes HVAs.
Access validation is done at prefetch time with IOTLB. Teach vq_access_ok() about that by moving the (vq->iotlb) check from vhost_vq_access_ok() to vq_access_ok(). This prevents vhost_vring_set_addr() to fail when verifying the accesses. No behavior change for vhost_vq_access_ok().
drivers/vhost/vhost.c +5 -4
@@ -1290,6 +1290,11 @@ static bool vq_access_ok(struct vhost_virtqueue *vq, unsigned int num, vring_used_t __user *used) { +/* If an IOTLB device is present, the vring addresses are +* GIOVAs. Access validation occurs at prefetch time. */ +if (vq->iotlb) +return true; +return access_ok (desc,vhost_get_desc_size (vq, num)) &&access_ok (avail,vhost_get_avail_size (vq, num)) &&access_ok (used,vhost_get_used_size (vq, num));
@@ -1383,10 +1388,6 @@ bool vhost_vq_access_ok(struct vhost_virtqueue *vq)if (!vq_log_access_ok (vq, vq->log_base))return false; -/* Access validation occurs at prefetch time with IOTLB */ -if (vq->iotlb) -return true; -return vq_access_ok (vq, vq->num, vq->desc, vq->avail, vq->used); }EXPORT_SYMBOL_GPL (vhost_vq_access_ok);