X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=liblttngctl%2Flttngctl.c;h=d0ba52bbf419d8a8b026a4316e3212271f0aef44;hp=b83d5ca92c83b516ade2f4c05336be116839b3fc;hb=d80a6244b0e8dc14b2912e72e94ff0848bb52ccc;hpb=1e307fab325060d9db4e989c0fdc3cddf46f50f6 diff --git a/liblttngctl/lttngctl.c b/liblttngctl/lttngctl.c index b83d5ca92..d0ba52bbf 100644 --- a/liblttngctl/lttngctl.c +++ b/liblttngctl/lttngctl.c @@ -152,6 +152,10 @@ static int check_tracing_group(const char *grp_name) /* Alloc group list of the right size */ grp_list = malloc(grp_list_size * sizeof(gid_t)); + if (!grp_list) { + ret = -1; + goto end; + } grp_id = getgroups(grp_list_size, grp_list); if (grp_id < -1) { perror("getgroups"); @@ -330,6 +334,10 @@ static int ask_sessiond(struct lttcomm_session_msg *lsm, void **buf) size = llm.data_size; if (size == 0) { + /* If client free with size 0 */ + if (buf != NULL) { + *buf = NULL; + } ret = 0; goto end; } @@ -343,6 +351,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; @@ -478,7 +496,7 @@ int lttng_enable_event(struct lttng_handle *handle, { struct lttcomm_session_msg lsm; - if (!handle) { + if (!handle || ev == NULL) { return -1; } @@ -492,12 +510,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)); @@ -527,7 +545,7 @@ int lttng_disable_event(struct lttng_handle *handle, const char *name, copy_lttng_domain(&lsm.domain, &handle->domain); - if (name == NULL) { + if (name != NULL) { copy_string(lsm.u.disable.name, name, sizeof(lsm.u.disable.name)); lsm.cmd_type = LTTNG_DISABLE_EVENT; } else { @@ -622,7 +640,7 @@ int lttng_list_tracepoints(struct lttng_handle *handle, /* * Return a human readable string of code */ -const char *lttng_get_readable_code(int code) +const char *lttng_strerror(int code) { if (code > -LTTCOMM_OK) { return "Ended with errors";