Fix enable all syscalls
[lttng-tools.git] / liblttngctl / lttngctl.c
index c2b1242d8c4897c6df6c912e2f6131f36ad6a895..0442a4f02bdbc686a868bf1abbc40a1896420894 100644 (file)
  */
 
 #define _GNU_SOURCE
-#include <errno.h>
 #include <grp.h>
+#include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
-#include <lttng/lttng.h>
-
 #include <lttng-sessiond-comm.h>
-#include "lttngerr.h"
-#include "lttng-share.h"
+#include <lttng-share.h>
+#include <lttng/lttng.h>
+#include <lttngerr.h>
 
 /* 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));
This page took 0.023349 seconds and 4 git commands to generate.