[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <98298b2f-7288-4b0b-8974-3d5111b589cb@moroto.mountain>
Date: Wed, 28 Feb 2024 21:24:07 +0300
From: Dan Carpenter <dan.carpenter@...aro.org>
To: Cindy Lu <lulu@...hat.com>
Cc: "Michael S. Tsirkin" <mst@...hat.com>, Jason Wang <jasowang@...hat.com>,
Xuan Zhuo <xuanzhuo@...ux.alibaba.com>,
Xie Yongji <xieyongji@...edance.com>,
Maxime Coquelin <maxime.coquelin@...hat.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Christian Brauner <brauner@...nel.org>,
virtualization@...ts.linux.dev, linux-kernel@...r.kernel.org,
kernel-janitors@...r.kernel.org
Subject: [PATCH v3] vduse: Fix off by one in vduse_dev_mmap()
The dev->vqs[] array has "dev->vq_num" elements. It's allocated in
vduse_dev_init_vqs(). Thus, this > comparison needs to be >= to avoid
reading one element beyond the end of the array.
Add an array_index_nospec() as well to prevent speculation issues.
Fixes: 316ecd1346b0 ("vduse: Add file operation for mmap")
Signed-off-by: Dan Carpenter <dan.carpenter@...aro.org>
---
v2: add array_index_nospec()
v3: I accidentally corrupted v2. Try again.
drivers/vdpa/vdpa_user/vduse_dev.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
index b7a1fb88c506..eb914084c650 100644
--- a/drivers/vdpa/vdpa_user/vduse_dev.c
+++ b/drivers/vdpa/vdpa_user/vduse_dev.c
@@ -1532,9 +1532,10 @@ static int vduse_dev_mmap(struct file *file, struct vm_area_struct *vma)
if ((vma->vm_flags & VM_SHARED) == 0)
return -EINVAL;
- if (index > dev->vq_num)
+ if (index >= dev->vq_num)
return -EINVAL;
+ index = array_index_nospec(index, dev->vq_num);
vq = dev->vqs[index];
vaddr = vq->vdpa_reconnect_vaddr;
if (vaddr == 0)
--
2.43.0
Powered by blists - more mailing lists