Fix: sysconf() unchecked return value
[lttng-ust.git] / tests / ust-multi-test / ust-multi-test.c
index 015211c97357b97ce6dd349d84fb8457bcc62c9d..011374395fc4ef5350ff728783f31db8839755e9 100644 (file)
@@ -40,6 +40,7 @@
 #include <sys/socket.h>
 
 #include <ust-comm.h>
+#include <lttng/ust-error.h>
 #include <../../libringbuffer/backend.h>
 #include <../../libringbuffer/frontend.h>
 #include "../../liblttng-ust/compat.h" /* For ENODATA */
@@ -109,7 +110,7 @@ int open_streams(int sock, int channel_handle, struct lttng_ust_object_data *str
                        }
                        k++;
                }
-               if (ret == -ENOENT)
+               if (ret == -LTTNG_UST_ERR_NOENT)
                        break;
                if (ret)
                        return ret;
@@ -637,11 +638,19 @@ 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) {
+               if (!page_size) {
+                       errno = EINVAL;
+               }
+               perror("Error in sysconf(_SC_PAGE_SIZE)");
+               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");
@@ -650,12 +659,15 @@ int update_futex(int fd, int active)
 
        if (active) {
                uatomic_set((int32_t *) wait_shm_mmap, 1);
-               futex_async((int32_t *) wait_shm_mmap, FUTEX_WAKE,
-                               INT_MAX, NULL, NULL, 0);
+               if (futex_async((int32_t *) wait_shm_mmap, FUTEX_WAKE,
+                               INT_MAX, NULL, NULL, 0) < 0) {
+                       perror("futex_async");
+                       goto error;
+               }
        } 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;
@@ -698,6 +710,7 @@ int main(int argc, char **argv)
        int ret, wait_shm_fd;
        struct sigaction act;
        mode_t old_umask = 0;
+       long page_size;
 
        set_ulimit();
 
@@ -730,6 +743,15 @@ int main(int argc, char **argv)
                return -1;
        }
 
+       page_size = sysconf(_SC_PAGE_SIZE);
+       if (page_size <= 0) {
+               if (!page_size) {
+                       errno = EINVAL;
+               }
+               perror("Error in sysconf(_SC_PAGE_SIZE)");
+               return -1;
+       }
+
        if (geteuid() == 0) {
                ret = mkdir(LTTNG_RUNDIR, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
                if (ret && errno != EEXIST) {
@@ -737,7 +759,7 @@ int main(int argc, char **argv)
                        return -1;
                }
                wait_shm_fd = get_wait_shm(DEFAULT_GLOBAL_APPS_WAIT_SHM_PATH,
-                                       sysconf(_SC_PAGE_SIZE), 1);
+                                       page_size, 1);
                if (wait_shm_fd < 0) {
                        perror("global wait shm error");
                        return -1;
@@ -763,7 +785,7 @@ int main(int argc, char **argv)
                snprintf(local_apps_wait_shm_path, PATH_MAX,
                         DEFAULT_HOME_APPS_WAIT_SHM_PATH, getuid());
                wait_shm_fd = get_wait_shm(local_apps_wait_shm_path,
-                                       sysconf(_SC_PAGE_SIZE), 0);
+                                       page_size, 0);
                if (wait_shm_fd < 0) {
                        perror("local wait shm error");
                        return -1;
@@ -813,6 +835,7 @@ int main(int argc, char **argv)
                        pid_t ppid;
                        uid_t uid;
                        gid_t gid;
+                       uint32_t bits_per_long;
                        char name[16];  /* Process name */
                } reg_msg;
                char bufname[17];
@@ -870,6 +893,7 @@ end:
                ret = system(cmd);
                if (ret < 0) {
                        printf("Unable to clean %s\n", home_rundir);
+                       return -1;
                }
        }
 
This page took 0.025244 seconds and 4 git commands to generate.