diff options
author | Thanos Makatos <thanos.makatos@nutanix.com> | 2022-10-05 14:57:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-05 14:57:21 +0100 |
commit | 7e91fd213bd25a704783a47c2207f508db2250c1 (patch) | |
tree | b98487b9179f9d11d939970972be0cf509e67d74 /lib | |
parent | aa19ba90f73c9b456a03a03d0d453e79fd8cf2d9 (diff) | |
download | libvfio-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.c | 12 |
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; } |