aboutsummaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authorJohn Levon <john.levon@nutanix.com>2021-10-20 13:47:30 +0100
committerGitHub <noreply@github.com>2021-10-20 13:47:30 +0100
commit5590ea8eb54e9f653b55b70f95e0793898e1955c (patch)
tree04cb65c30d23972b6f64ae9f38496286f89a79f1 /samples
parent8d82bd5f20fac5d8b4dab510d2294e076a6dd93d (diff)
downloadlibvfio-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.c23
-rw-r--r--samples/server.c15
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");