Skip to content

Commit a6097e0

Browse files
siwliu-kernelmstsirkin
authored andcommitted
vdpa/mlx5: Fix oversized null mkey longer than 32bit
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>
1 parent 439252e commit a6097e0

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

  • drivers/vdpa/mlx5/core

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)