The patch below does not apply to the 6.6-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,
Sasha

------------------ original commit in Linus's tree ------------------

>From cd025c1e876b4e262e71398236a1550486a73ede Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <[email protected]>
Date: Mon, 19 Jan 2026 15:32:54 +0100
Subject: [PATCH] vhost: move vdpa group bound check to vhost_vdpa
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Remove duplication by consolidating these here.  This reduces the
posibility of a parent driver missing them.

While we're at it, fix a bug in vdpa_sim where a valid ASID can be
assigned to a group equal to ngroups, causing an out of bound write.

Cc: [email protected]
Fixes: bda324fd037a ("vdpasim: control virtqueue support")
Acked-by: Jason Wang <[email protected]>
Signed-off-by: Eugenio PĂ©rez <[email protected]>
Signed-off-by: Michael S. Tsirkin <[email protected]>
Message-Id: <[email protected]>
---
 drivers/vdpa/mlx5/net/mlx5_vnet.c | 3 ---
 drivers/vdpa/vdpa_sim/vdpa_sim.c  | 6 ------
 drivers/vhost/vdpa.c              | 2 +-
 3 files changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c 
b/drivers/vdpa/mlx5/net/mlx5_vnet.c
index ddaa1366704bb..44062e9d68f00 100644
--- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
+++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
@@ -3640,9 +3640,6 @@ static int mlx5_set_group_asid(struct vdpa_device *vdev, 
u32 group,
        struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
        int err = 0;
 
-       if (group >= MLX5_VDPA_NUMVQ_GROUPS)
-               return -EINVAL;
-
        mvdev->mres.group2asid[group] = asid;
 
        mutex_lock(&mvdev->mres.lock);
diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c
index c1c6431950e1b..df9c7ddc5d782 100644
--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c
@@ -606,12 +606,6 @@ static int vdpasim_set_group_asid(struct vdpa_device 
*vdpa, unsigned int group,
        struct vhost_iotlb *iommu;
        int i;
 
-       if (group > vdpasim->dev_attr.ngroups)
-               return -EINVAL;
-
-       if (asid >= vdpasim->dev_attr.nas)
-               return -EINVAL;
-
        iommu = &vdpasim->iommu[asid];
 
        mutex_lock(&vdpasim->mutex);
diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index 05a481e4c385a..9d25b735b43dd 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -680,7 +680,7 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, 
unsigned int cmd,
        case VHOST_VDPA_SET_GROUP_ASID:
                if (copy_from_user(&s, argp, sizeof(s)))
                        return -EFAULT;
-               if (s.num >= vdpa->nas)
+               if (idx >= vdpa->ngroups || s.num >= vdpa->nas)
                        return -EINVAL;
                if (!ops->set_group_asid)
                        return -EOPNOTSUPP;
-- 
2.51.0





Reply via email to