Skip to content

Commit 8fd217a

Browse files
siwliu-kernelgregkh
authored andcommitted
vdpa/mlx5: Fix oversized null mkey longer than 32bit
commit a6097e0 upstream. create_user_mr() has correct code to count the number of null keys used to fill in a hole for the memory map. However, fill_indir() does not follow the same to cap the range up to the 1GB limit correspondingly. Fill in more null keys for the gaps in between, so that null keys are correctly populated. Fixes: 94abbcc ("vdpa/mlx5: Add shared memory registration code") Cc: stable@vger.kernel.org Reported-by: Cong Meng <cong.meng@oracle.com> Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com> Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com> Acked-by: Eugenio Pérez <eperezma@redhat.com> Message-Id: <20250220193732.521462-2-dtatulea@nvidia.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent a1dde74 commit 8fd217a

File tree

1 file changed

+5
-2
lines changed
  • drivers/vdpa/mlx5/core

1 file changed

+5
-2
lines changed

drivers/vdpa/mlx5/core/mr.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,12 @@ static void fill_indir(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr *mkey, v
190190
klm->bcount = cpu_to_be32(klm_bcount(dmr->end - dmr->start));
191191
preve = dmr->end;
192192
} else {
193+
u64 bcount = min_t(u64, dmr->start - preve, MAX_KLM_SIZE);
194+
193195
klm->key = cpu_to_be32(mvdev->res.null_mkey);
194-
klm->bcount = cpu_to_be32(klm_bcount(dmr->start - preve));
195-
preve = dmr->start;
196+
klm->bcount = cpu_to_be32(klm_bcount(bcount));
197+
preve += bcount;
198+
196199
goto again;
197200
}
198201
}

0 commit comments

Comments
 (0)