From: Mathieu Desnoyers Date: Fri, 21 Feb 2014 16:01:01 +0000 (-0500) Subject: Fix: handle sysconf errors X-Git-Tag: v2.3.2~6 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=995034f5c84458ae37d0ad1d2acfcc6bbef84b03;p=lttng-ust.git 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 --- diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index a6e4ba35..f9d957d8 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -677,9 +677,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; } @@ -852,15 +857,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;