diff options
author | John Levon <john.levon@nutanix.com> | 2021-10-20 13:47:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-20 13:47:30 +0100 |
commit | 5590ea8eb54e9f653b55b70f95e0793898e1955c (patch) | |
tree | 04cb65c30d23972b6f64ae9f38496286f89a79f1 /samples | |
parent | 8d82bd5f20fac5d8b4dab510d2294e076a6dd93d (diff) | |
download | libvfio-user-5590ea8eb54e9f653b55b70f95e0793898e1955c.zip libvfio-user-5590ea8eb54e9f653b55b70f95e0793898e1955c.tar.gz libvfio-user-5590ea8eb54e9f653b55b70f95e0793898e1955c.tar.bz2 |
fix coverity warnings (#611)
Fix a few coverity-identified issues.
Signed-off-by: John Levon <john.levon@nutanix.com>
Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
Diffstat (limited to 'samples')
-rw-r--r-- | samples/client.c | 23 | ||||
-rw-r--r-- | samples/server.c | 15 |
2 files changed, 23 insertions, 15 deletions
diff --git a/samples/client.c b/samples/client.c index 80a84d4..c492854 100644 --- a/samples/client.c +++ b/samples/client.c @@ -276,8 +276,8 @@ mmap_sparse_areas(int *fds, struct vfio_region_info *region_info, ssize_t ret; void *addr; - char pathname[BUFSIZ]; - char buf[PATH_MAX]; + char pathname[PATH_MAX]; + char buf[PATH_MAX] = ""; ret = snprintf(pathname, sizeof(pathname), "/proc/self/fd/%d", fds[i]); assert(ret != -1 && (size_t)ret < sizeof(pathname)); @@ -285,7 +285,6 @@ mmap_sparse_areas(int *fds, struct vfio_region_info *region_info, if (ret == -1) { err(EXIT_FAILURE, "failed to resolve file descriptor %d", fds[i]); } - buf[ret + 1] = '\0'; addr = mmap(NULL, sparse->areas[i].size, PROT_READ | PROT_WRITE, MAP_SHARED, fds[i], region_info->offset + sparse->areas[i].offset); @@ -295,6 +294,9 @@ mmap_sparse_areas(int *fds, struct vfio_region_info *region_info, i, buf, sparse->areas[i].offset, sparse->areas[i].offset + sparse->areas[i].size - 1); } + + ret = munmap(addr, sparse->areas[i].size); + assert(ret == 0); } } @@ -1080,12 +1082,13 @@ map_dma_regions(int sock, struct vfio_user_dma_map *dma_regions, int main(int argc, char *argv[]) { - int ret, sock, irq_fd; + char template[] = "/tmp/libvfio-user.XXXXXX"; + int ret, sock, irq_fd; struct vfio_user_dma_map *dma_regions; struct vfio_user_device_info client_dev_info = {0}; int *dma_region_fds; int i; - FILE *fp; + int tmpfd; int server_max_fds; size_t server_max_data_xfer_size; size_t pgsize; @@ -1159,14 +1162,16 @@ int main(int argc, char *argv[]) */ nr_dma_regions = server_max_fds << 1; - if ((fp = tmpfile()) == NULL) { - err(EXIT_FAILURE, "failed to create DMA file"); + if ((tmpfd = mkstemp(template)) == -1) { + err(EXIT_FAILURE, "failed to create backing file"); } - if ((ret = ftruncate(fileno(fp), nr_dma_regions * sysconf(_SC_PAGESIZE))) == -1) { + if ((ret = ftruncate(tmpfd, nr_dma_regions * sysconf(_SC_PAGESIZE))) == -1) { err(EXIT_FAILURE, "failed to truncate file"); } + unlink(template); + dma_regions = alloca(sizeof(*dma_regions) * nr_dma_regions); dma_region_fds = alloca(sizeof(*dma_region_fds) * nr_dma_regions); @@ -1176,7 +1181,7 @@ int main(int argc, char *argv[]) dma_regions[i].size = sysconf(_SC_PAGESIZE); dma_regions[i].offset = dma_regions[i].addr; dma_regions[i].flags = VFIO_USER_F_DMA_REGION_READ | VFIO_USER_F_DMA_REGION_WRITE; - dma_region_fds[i] = fileno(fp); + dma_region_fds[i] = tmpfd; } map_dma_regions(sock, dma_regions, dma_region_fds, nr_dma_regions); diff --git a/samples/server.c b/samples/server.c index 4da476b..416d5c8 100644 --- a/samples/server.c +++ b/samples/server.c @@ -418,6 +418,7 @@ page_align(size_t size) int main(int argc, char *argv[]) { + char template[] = "/tmp/libvfio-user.XXXXXX"; int ret; bool verbose = false; int opt; @@ -430,7 +431,7 @@ int main(int argc, char *argv[]) } }; vfu_ctx_t *vfu_ctx; - FILE *fp; + int tmpfd; const vfu_migration_callbacks_t migr_callbacks = { .version = VFU_MIGR_CALLBACKS_VERS, .transition = &migration_device_state_transition, @@ -494,10 +495,12 @@ int main(int argc, char *argv[]) * We choose to use a single file which contains both BAR1 and the migration * registers. They could also be completely different files. */ - if ((fp = tmpfile()) == NULL) { + if ((tmpfd = mkstemp(template)) == -1) { err(EXIT_FAILURE, "failed to create backing file"); } + unlink(template); + server_data.bar1_size = bar1_size; /* @@ -509,11 +512,11 @@ int main(int argc, char *argv[]) migr_data_size = page_align(bar1_size + sizeof(time_t)); migr_size = migr_regs_size + migr_data_size; - if (ftruncate(fileno(fp), server_data.bar1_size + migr_size) == -1) { + if (ftruncate(tmpfd, server_data.bar1_size + migr_size) == -1) { err(EXIT_FAILURE, "failed to truncate backing file"); } server_data.bar1 = mmap(NULL, server_data.bar1_size, PROT_READ | PROT_WRITE, - MAP_SHARED, fileno(fp), 0); + MAP_SHARED, tmpfd, 0); if (server_data.bar1 == MAP_FAILED) { err(EXIT_FAILURE, "failed to mmap BAR1"); } @@ -524,7 +527,7 @@ int main(int argc, char *argv[]) ret = vfu_setup_region(vfu_ctx, VFU_PCI_DEV_BAR1_REGION_IDX, server_data.bar1_size, &bar1_access, VFU_REGION_FLAG_RW, bar1_mmap_areas, 2, - fileno(fp), 0); + tmpfd, 0); if (ret < 0) { err(EXIT_FAILURE, "failed to setup BAR1 region"); } @@ -544,7 +547,7 @@ int main(int argc, char *argv[]) */ ret = vfu_setup_region(vfu_ctx, VFU_PCI_DEV_MIGR_REGION_IDX, migr_size, NULL, VFU_REGION_FLAG_RW, migr_mmap_areas, - ARRAY_SIZE(migr_mmap_areas), fileno(fp), + ARRAY_SIZE(migr_mmap_areas), tmpfd, server_data.bar1_size); if (ret < 0) { err(EXIT_FAILURE, "failed to setup migration region"); |