Fix: statedump: invalid read during iter_end
[lttng-ust.git] / src / lib / lttng-ust / lttng-ust-statedump.c
index cd4df182c0e04564f3fdcefc95864eb682f2ccbb..309a98fa2201243913dbf09fcc16c8e2ae134338 100644 (file)
 #include "common/macros.h"
 #include "lttng-tracer-core.h"
 #include "lttng-ust-statedump.h"
-#include "jhash.h"
-#include "getenv.h"
-#include "ust-events-internal.h"
+#include "common/jhash.h"
+#include "common/getenv.h"
+#include "lib/lttng-ust/events.h"
 
-#define TRACEPOINT_DEFINE
+#define LTTNG_UST_TRACEPOINT_HIDDEN_DEFINITION
+#define LTTNG_UST_TRACEPOINT_PROVIDER_HIDDEN_DEFINITION
+
+#define LTTNG_UST_TRACEPOINT_DEFINE
 #include "ust_lib.h"                           /* Only define. */
 
-#define TRACEPOINT_CREATE_PROBES
-#define TP_SESSION_CHECK
+#define LTTNG_UST_TRACEPOINT_CREATE_PROBES
+#define LTTNG_UST_TP_SESSION_CHECK
 #include "lttng-ust-statedump-provider.h"      /* Define and create probes. */
 
 struct dl_iterate_data {
@@ -60,7 +63,7 @@ struct lttng_ust_dl_node {
 
 #define UST_DL_STATE_HASH_BITS 8
 #define UST_DL_STATE_TABLE_SIZE        (1 << UST_DL_STATE_HASH_BITS)
-struct cds_hlist_head dl_state_table[UST_DL_STATE_TABLE_SIZE];
+static struct cds_hlist_head dl_state_table[UST_DL_STATE_TABLE_SIZE];
 
 typedef void (*tracepoint_cb)(struct lttng_ust_session *session, void *priv);
 
@@ -207,7 +210,7 @@ void trace_bin_info_cb(struct lttng_ust_session *session, void *priv)
 {
        struct bin_info_data *bin_data = (struct bin_info_data *) priv;
 
-       tracepoint(lttng_ust_statedump, bin_info,
+       lttng_ust_tracepoint(lttng_ust_statedump, bin_info,
                session, bin_data->base_addr_ptr,
                bin_data->resolved_path, bin_data->memsz,
                bin_data->is_pic, bin_data->has_build_id,
@@ -219,7 +222,7 @@ void trace_build_id_cb(struct lttng_ust_session *session, void *priv)
 {
        struct bin_info_data *bin_data = (struct bin_info_data *) priv;
 
-       tracepoint(lttng_ust_statedump, build_id,
+       lttng_ust_tracepoint(lttng_ust_statedump, build_id,
                session, bin_data->base_addr_ptr,
                bin_data->build_id, bin_data->build_id_len);
 }
@@ -229,7 +232,7 @@ void trace_debug_link_cb(struct lttng_ust_session *session, void *priv)
 {
        struct bin_info_data *bin_data = (struct bin_info_data *) priv;
 
-       tracepoint(lttng_ust_statedump, debug_link,
+       lttng_ust_tracepoint(lttng_ust_statedump, debug_link,
                session, bin_data->base_addr_ptr,
                bin_data->dbg_file, bin_data->crc);
 }
@@ -238,19 +241,19 @@ static
 void procname_cb(struct lttng_ust_session *session, void *priv)
 {
        char *procname = (char *) priv;
-       tracepoint(lttng_ust_statedump, procname, session, procname);
+       lttng_ust_tracepoint(lttng_ust_statedump, procname, session, procname);
 }
 
 static
 void trace_start_cb(struct lttng_ust_session *session, void *priv __attribute__((unused)))
 {
-       tracepoint(lttng_ust_statedump, start, session);
+       lttng_ust_tracepoint(lttng_ust_statedump, start, session);
 }
 
 static
 void trace_end_cb(struct lttng_ust_session *session, void *priv __attribute__((unused)))
 {
-       tracepoint(lttng_ust_statedump, end, session);
+       lttng_ust_tracepoint(lttng_ust_statedump, end, session);
 }
 
 static
@@ -380,19 +383,19 @@ void iter_begin(struct dl_iterate_data *data)
 static
 void trace_lib_load(const struct bin_info_data *bin_data, void *ip)
 {
-       tracepoint(lttng_ust_lib, load,
+       lttng_ust_tracepoint(lttng_ust_lib, load,
                ip, bin_data->base_addr_ptr, bin_data->resolved_path,
                bin_data->memsz, bin_data->has_build_id,
                bin_data->has_debug_link);
 
        if (bin_data->has_build_id) {
-               tracepoint(lttng_ust_lib, build_id,
+               lttng_ust_tracepoint(lttng_ust_lib, build_id,
                        ip, bin_data->base_addr_ptr, bin_data->build_id,
                        bin_data->build_id_len);
        }
 
        if (bin_data->has_debug_link) {
-               tracepoint(lttng_ust_lib, debug_link,
+               lttng_ust_tracepoint(lttng_ust_lib, debug_link,
                        ip, bin_data->base_addr_ptr, bin_data->dbg_file,
                        bin_data->crc);
        }
@@ -401,7 +404,7 @@ void trace_lib_load(const struct bin_info_data *bin_data, void *ip)
 static
 void trace_lib_unload(const struct bin_info_data *bin_data, void *ip)
 {
-       tracepoint(lttng_ust_lib, unload, ip, bin_data->base_addr_ptr);
+       lttng_ust_tracepoint(lttng_ust_lib, unload, ip, bin_data->base_addr_ptr);
 }
 
 static
@@ -420,10 +423,10 @@ void iter_end(struct dl_iterate_data *data, void *ip)
         */
        for (i = 0; i < UST_DL_STATE_TABLE_SIZE; i++) {
                struct cds_hlist_head *head;
-               struct lttng_ust_dl_node *e;
+               struct lttng_ust_dl_node *e, *tmp;
 
                head = &dl_state_table[i];
-               cds_hlist_for_each_entry_2(e, head, node) {
+               cds_hlist_for_each_entry_safe_2(e, tmp, head, node) {
                        if (e->marked) {
                                if (!e->traced) {
                                        trace_lib_load(&e->bin_data, ip);
@@ -551,10 +554,10 @@ void lttng_ust_dl_update(void *ip)
                return;
 
        /*
-        * Fixup lttng-ust TLS when called from dlopen/dlclose
-        * instrumentation.
+        * Force the allocation of lttng-ust TLS variables when called from
+        * dlopen/dlclose instrumentation.
         */
-       lttng_ust_fixup_tls();
+       lttng_ust_alloc_tls();
 
        data.exec_found = 0;
        data.first = true;
@@ -628,9 +631,9 @@ int do_lttng_ust_statedump(void *owner)
 
 void lttng_ust_statedump_init(void)
 {
-       __tracepoints__init();
-       __tracepoints__ptrs_init();
-       __lttng_events_init__lttng_ust_statedump();
+       lttng_ust__tracepoints__init();
+       lttng_ust__tracepoints__ptrs_init();
+       lttng_ust__events_init__lttng_ust_statedump();
        lttng_ust_dl_update(LTTNG_UST_CALLER_IP());
 }
 
@@ -652,8 +655,8 @@ void ust_dl_state_destroy(void)
 
 void lttng_ust_statedump_destroy(void)
 {
-       __lttng_events_exit__lttng_ust_statedump();
-       __tracepoints__ptrs_destroy();
-       __tracepoints__destroy();
+       lttng_ust__events_exit__lttng_ust_statedump();
+       lttng_ust__tracepoints__ptrs_destroy();
+       lttng_ust__tracepoints__destroy();
        ust_dl_state_destroy();
 }
This page took 0.025808 seconds and 4 git commands to generate.