X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=liblttngctl%2Flttngctl.c;h=0442a4f02bdbc686a868bf1abbc40a1896420894;hb=d87bfb32097dd9dddb5de2b05dd87b53e3d3ad73;hp=c2b1242d8c4897c6df6c912e2f6131f36ad6a895;hpb=007953922e4d3f9f96b896cddb1c4dceddccc26e;p=lttng-tools.git diff --git a/liblttngctl/lttngctl.c b/liblttngctl/lttngctl.c index c2b1242d8..0442a4f02 100644 --- a/liblttngctl/lttngctl.c +++ b/liblttngctl/lttngctl.c @@ -21,18 +21,17 @@ */ #define _GNU_SOURCE -#include #include +#include #include #include #include #include -#include - #include -#include "lttngerr.h" -#include "lttng-share.h" +#include +#include +#include /* Socket to session daemon for communication */ static int sessiond_socket; @@ -348,6 +347,16 @@ static int ask_sessiond(struct lttcomm_session_msg *lsm, void **buf) goto end; } + /* + * Extra protection not to dereference a NULL pointer. If buf is NULL at + * this point, an error is returned and data is freed. + */ + if (buf == NULL) { + ret = -1; + free(data); + goto end; + } + *buf = data; ret = size; @@ -483,7 +492,7 @@ int lttng_enable_event(struct lttng_handle *handle, { struct lttcomm_session_msg lsm; - if (!handle) { + if (!handle || ev == NULL) { return -1; } @@ -497,12 +506,12 @@ int lttng_enable_event(struct lttng_handle *handle, copy_lttng_domain(&lsm.domain, &handle->domain); - if (ev) { + if (ev->name[0] != '\0') { lsm.cmd_type = LTTNG_ENABLE_EVENT; - memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event)); } else { lsm.cmd_type = LTTNG_ENABLE_ALL_EVENT; } + memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event)); copy_string(lsm.session.name, handle->session_name, sizeof(lsm.session.name));