aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorThanos Makatos <thanos.makatos@nutanix.com>2022-10-05 14:57:21 +0100
committerGitHub <noreply@github.com>2022-10-05 14:57:21 +0100
commit7e91fd213bd25a704783a47c2207f508db2250c1 (patch)
treeb98487b9179f9d11d939970972be0cf509e67d74 /lib
parentaa19ba90f73c9b456a03a03d0d453e79fd8cf2d9 (diff)
downloadlibvfio-user-7e91fd213bd25a704783a47c2207f508db2250c1.zip
libvfio-user-7e91fd213bd25a704783a47c2207f508db2250c1.tar.gz
libvfio-user-7e91fd213bd25a704783a47c2207f508db2250c1.tar.bz2
don't duplicate FD in get region info (#715)
This is out of spec. Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com> Reviewed-by: John Levon <john.levon@nutanix.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/libvfio-user.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/lib/libvfio-user.c b/lib/libvfio-user.c
index 5bcb0c2..6359d5d 100644
--- a/lib/libvfio-user.c
+++ b/lib/libvfio-user.c
@@ -140,13 +140,6 @@ dev_get_caps(vfu_ctx_t *vfu_ctx, vfu_reg_info_t *vfu_reg, bool is_migr_reg,
sparse = (struct vfio_region_info_cap_sparse_mmap*)header;
}
- if (nr_mmap_areas > vfu_ctx->client_max_fds) {
- vfu_log(vfu_ctx, LOG_DEBUG, "%s: region has nr_mmap_areas=%d, "
- "but client only supports %d fds", __func__,
- nr_mmap_areas, vfu_ctx->client_max_fds);
- return ERROR_INT(ENOSPC);
- }
-
*fds = malloc(nr_mmap_areas * sizeof(int));
if (*fds == NULL) {
return ERROR_INT(ENOMEM);
@@ -154,7 +147,9 @@ dev_get_caps(vfu_ctx_t *vfu_ctx, vfu_reg_info_t *vfu_reg, bool is_migr_reg,
sparse->header.id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
sparse->header.version = 1;
sparse->header.next = 0;
- sparse->nr_areas = *nr_fds = nr_mmap_areas;
+ sparse->nr_areas = nr_mmap_areas;
+ *nr_fds = 1;
+ (*fds)[0] = vfu_reg->fd;
for (i = 0; i < nr_mmap_areas; i++) {
struct iovec *iov = &vfu_reg->mmap_areas[i];
@@ -162,7 +157,6 @@ dev_get_caps(vfu_ctx_t *vfu_ctx, vfu_reg_info_t *vfu_reg, bool is_migr_reg,
vfu_log(vfu_ctx, LOG_DEBUG, "%s: area %d [%p, %p)", __func__,
i, iov->iov_base, iov_end(iov));
- (*fds)[i] = vfu_reg->fd;
sparse->areas[i].offset = (uintptr_t)iov->iov_base;
sparse->areas[i].size = iov->iov_len;
}