Fix: appending unallocated data from beyond exclusion entries
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Fri, 28 May 2021 20:06:09 +0000 (16:06 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 11 Jun 2021 20:45:51 +0000 (16:45 -0400)
Issue
=====
If an exclusion string is smaller than the `LTTNG_SYMBOL_NAME_LEN`
integer, the `lttng_dynamic_buffer_append()` call will append
unallocated data to the buffer.

Fix
===
Use the `exclusion_len` value to copy the actual exclusion and pad the
remaining bytes with zeros.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I04c6681c28e82de29791541eb490158db9e503d0

src/lib/lttng-ctl/lttng-ctl.c

index d9805e22288f44b7dc2df548fd1e21c18482b3ad..7ad1fe13291b8f40599ad60ce197bbbfc5c6dae5 100644 (file)
@@ -1204,7 +1204,7 @@ int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
        for (i = 0; i < exclusion_count; i++) {
                size_t exclusion_len;
 
-               exclusion_len = lttng_strnlen(*(exclusion_list + i),
+               exclusion_len = lttng_strnlen(exclusion_list[i],
                                LTTNG_SYMBOL_NAME_LEN);
                if (exclusion_len == LTTNG_SYMBOL_NAME_LEN) {
                        /* Exclusion is not NULL-terminated. */
@@ -1213,7 +1213,17 @@ int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
                }
 
                ret = lttng_dynamic_buffer_append(&payload.buffer,
-                               *(exclusion_list + i), LTTNG_SYMBOL_NAME_LEN);
+                               exclusion_list[i], exclusion_len);
+               if (ret) {
+                       goto mem_error;
+               }
+
+               /*
+                * Padding the rest of the entry with zeros. Every exclusion
+                * entries take LTTNG_SYMBOL_NAME_LEN bytes in the buffer.
+                */
+               ret = lttng_dynamic_buffer_set_size(&payload.buffer,
+                               LTTNG_SYMBOL_NAME_LEN * (i + 1));
                if (ret) {
                        goto mem_error;
                }
This page took 0.02871 seconds and 5 git commands to generate.