X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsyscall.c;h=6ee38bd0fa27a3f51c5541f8601a890d130b8aed;hb=32af2c95c9494c282804964aed17bb2d57887505;hp=7ae6682bb419c06c6cdd8231c5c92d0dbef475c4;hpb=9897fbc95aea23f996b7543d86363a3dd72a0c53;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/syscall.c b/src/bin/lttng-sessiond/syscall.c index 7ae6682bb..6ee38bd0f 100644 --- a/src/bin/lttng-sessiond/syscall.c +++ b/src/bin/lttng-sessiond/syscall.c @@ -51,7 +51,7 @@ int syscall_init_table(void) fd = kernctl_syscall_list(kernel_tracer_fd); if (fd < 0) { - ret = -errno; + ret = fd; PERROR("kernelctl syscall list"); goto error_ioctl; } @@ -82,7 +82,7 @@ int syscall_init_table(void) /* Double memory size. */ new_nbmem = max(index, nbmem << 1); - if (new_nbmem < nbmem) { + if (new_nbmem > (SIZE_MAX / sizeof(*new_list))) { /* Overflow, stop everything, something went really wrong. */ ERR("Syscall listing memory size overflow. Stopping"); free(syscall_table); @@ -108,8 +108,13 @@ int syscall_init_table(void) } syscall_table[index].index = index; syscall_table[index].bitness = bitness; - strncpy(syscall_table[index].name, name, - sizeof(syscall_table[index].name)); + if (lttng_strncpy(syscall_table[index].name, name, + sizeof(syscall_table[index].name))) { + ret = -EINVAL; + free(syscall_table); + syscall_table = NULL; + goto error; + } /* DBG("Syscall name '%s' at index %" PRIu32 " of bitness %u", syscall_table[index].name,