From 172d6b687981b2606a5ad9caffba5686be96ff28 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Fri, 21 Feb 2014 11:01:01 -0500 Subject: [PATCH] Fix: handle sysconf errors CID 1021261 (#1 of 1): Argument cannot be negative (NEGATIVE_RETURNS)10. negative_returns: "sysconf(30)" is passed to a parameter that cannot be negative. Signed-off-by: Mathieu Desnoyers --- liblttng-ust/lttng-ust-comm.c | 22 +++++++++++++++------ tests/ust-basic-tracing/ust-basic-tracing.c | 10 +++++++--- tests/ust-multi-test/ust-multi-test.c | 10 +++++++--- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 74d805ae..77cde295 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -819,9 +819,14 @@ void cleanup_sock_info(struct sock_info *sock_info, int exiting) sock_info->notify_socket = -1; } if (sock_info->wait_shm_mmap) { - ret = munmap(sock_info->wait_shm_mmap, sysconf(_SC_PAGE_SIZE)); - if (ret) { - ERR("Error unmapping wait shm"); + long page_size; + + page_size = sysconf(_SC_PAGE_SIZE); + if (page_size > 0) { + ret = munmap(sock_info->wait_shm_mmap, page_size); + if (ret) { + ERR("Error unmapping wait shm"); + } } sock_info->wait_shm_mmap = NULL; } @@ -994,15 +999,20 @@ error_close: static char *get_map_shm(struct sock_info *sock_info) { - size_t mmap_size = sysconf(_SC_PAGE_SIZE); + long page_size; int wait_shm_fd, ret; char *wait_shm_mmap; - wait_shm_fd = get_wait_shm(sock_info, mmap_size); + page_size = sysconf(_SC_PAGE_SIZE); + if (page_size < 0) { + goto error; + } + + wait_shm_fd = get_wait_shm(sock_info, page_size); if (wait_shm_fd < 0) { goto error; } - wait_shm_mmap = mmap(NULL, mmap_size, PROT_READ, + wait_shm_mmap = mmap(NULL, page_size, PROT_READ, MAP_SHARED, wait_shm_fd, 0); /* close shm fd immediately after taking the mmap reference */ ret = close(wait_shm_fd); diff --git a/tests/ust-basic-tracing/ust-basic-tracing.c b/tests/ust-basic-tracing/ust-basic-tracing.c index 18fb0878..7bfeb5bc 100644 --- a/tests/ust-basic-tracing/ust-basic-tracing.c +++ b/tests/ust-basic-tracing/ust-basic-tracing.c @@ -642,11 +642,15 @@ error: int update_futex(int fd, int active) { - size_t mmap_size = sysconf(_SC_PAGE_SIZE); + long page_size; char *wait_shm_mmap; int ret; - wait_shm_mmap = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, + page_size = sysconf(_SC_PAGE_SIZE); + if (page_size < 0) { + goto error; + } + wait_shm_mmap = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (wait_shm_mmap == MAP_FAILED) { perror("mmap"); @@ -660,7 +664,7 @@ int update_futex(int fd, int active) } else { uatomic_set((int32_t *) wait_shm_mmap, 0); } - ret = munmap(wait_shm_mmap, mmap_size); + ret = munmap(wait_shm_mmap, page_size); if (ret) { perror("Error unmapping wait shm"); goto error; diff --git a/tests/ust-multi-test/ust-multi-test.c b/tests/ust-multi-test/ust-multi-test.c index 6f277a21..77711540 100644 --- a/tests/ust-multi-test/ust-multi-test.c +++ b/tests/ust-multi-test/ust-multi-test.c @@ -638,11 +638,15 @@ error: int update_futex(int fd, int active) { - size_t mmap_size = sysconf(_SC_PAGE_SIZE); + long page_size; char *wait_shm_mmap; int ret; - wait_shm_mmap = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, + page_size = sysconf(_SC_PAGE_SIZE); + if (page_size < 0) { + goto error; + } + wait_shm_mmap = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (wait_shm_mmap == MAP_FAILED) { perror("mmap"); @@ -656,7 +660,7 @@ int update_futex(int fd, int active) } else { uatomic_set((int32_t *) wait_shm_mmap, 0); } - ret = munmap(wait_shm_mmap, mmap_size); + ret = munmap(wait_shm_mmap, page_size); if (ret) { perror("Error unmapping wait shm"); goto error; -- 2.34.1