mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 04:12:04 -04:00
vhost: Don't call access_ok() when using IOTLB
commit 0210a8db2aeca393fb3067e234967877e3146266 upstream.
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().
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1883084
Fixes: 6b1e6cc785 ("vhost: new device IOTLB API")
Cc: jasowang@redhat.com
CC: stable@vger.kernel.org # 4.14+
Signed-off-by: Greg Kurz <groug@kaod.org>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/r/160171931213.284610.2052489816407219136.stgit@bahia.lan
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
456d77c1bd
commit
57b47abc1a
1 changed files with 5 additions and 4 deletions
|
|
@ -1299,6 +1299,11 @@ static bool vq_access_ok(struct vhost_virtqueue *vq, unsigned int num,
|
|||
struct vring_used __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));
|
||||
|
|
@ -1394,10 +1399,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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue