diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-02-10 10:26:38 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-02-10 10:26:38 +0000 |
commit | df9ab9771c64f5229843bfe2a20fe0ee6ac59fc1 (patch) | |
tree | a091be1024bd76627f78e791e377126e47703b7b /drivers/vhost | |
parent | ed8f8ce38d0f7b505d7da2d79522972e962457c2 (diff) | |
parent | 4e1c0664de11e4b5861957ab4ddff2aeeffd042f (diff) |
Merge branch 'devel-stable' into for-next
Diffstat (limited to 'drivers/vhost')
-rw-r--r-- | drivers/vhost/vhost.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index ed71b5347a7..cb807d0ea49 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -713,9 +713,13 @@ long vhost_vring_ioctl(struct vhost_dev *d, int ioctl, void __user *argp) r = -EFAULT; break; } - if ((a.avail_user_addr & (sizeof *vq->avail->ring - 1)) || - (a.used_user_addr & (sizeof *vq->used->ring - 1)) || - (a.log_guest_addr & (sizeof *vq->used->ring - 1))) { + + /* Make sure it's safe to cast pointers to vring types. */ + BUILD_BUG_ON(__alignof__ *vq->avail > VRING_AVAIL_ALIGN_SIZE); + BUILD_BUG_ON(__alignof__ *vq->used > VRING_USED_ALIGN_SIZE); + if ((a.avail_user_addr & (VRING_AVAIL_ALIGN_SIZE - 1)) || + (a.used_user_addr & (VRING_USED_ALIGN_SIZE - 1)) || + (a.log_guest_addr & (sizeof(u64) - 1))) { r = -EINVAL; break; } |