Fix OOPS caused by reference of config pointer
[lttng-modules.git] / ltt-probes.c
index e1ed2a3108d591a795f371affecbc1c7421294cb..81dcbd715df08300b6bcfd9973418f853544e8d0 100644 (file)
@@ -4,6 +4,8 @@
  * Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * Holds LTTng probes registry.
+ *
+ * Dual LGPL v2.1/GPL v2 license.
  */
 
 #include <linux/module.h>
@@ -24,8 +26,8 @@ const struct lttng_event_desc *find_event(const char *name)
 
        list_for_each_entry(probe_desc, &probe_list, head) {
                for (i = 0; i < probe_desc->nr_events; i++) {
-                       if (!strcmp(probe_desc->event_desc[i].name, name))
-                               return &probe_desc->event_desc[i];
+                       if (!strcmp(probe_desc->event_desc[i]->name, name))
+                               return probe_desc->event_desc[i];
                }
        }
        return NULL;
@@ -42,7 +44,7 @@ int ltt_probe_register(struct lttng_probe_desc *desc)
         * overhead becomes an issue.
         */
        for (i = 0; i < desc->nr_events; i++) {
-               if (find_event(desc->event_desc[i].name)) {
+               if (find_event(desc->event_desc[i]->name)) {
                        ret = -EEXIST;
                        goto end;
                }
@@ -90,10 +92,11 @@ void *tp_list_start(struct seq_file *m, loff_t *pos)
        struct lttng_probe_desc *probe_desc;
        int iter = 0, i;
 
+       mutex_lock(&probe_mutex);
        list_for_each_entry(probe_desc, &probe_list, head) {
                for (i = 0; i < probe_desc->nr_events; i++) {
                        if (iter++ >= *pos)
-                               return (void *) &probe_desc->event_desc[i];
+                               return (void *) probe_desc->event_desc[i];
                }
        }
        /* End of list */
@@ -110,7 +113,7 @@ void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos)
        list_for_each_entry(probe_desc, &probe_list, head) {
                for (i = 0; i < probe_desc->nr_events; i++) {
                        if (iter++ >= *ppos)
-                               return (void *) &probe_desc->event_desc[i];
+                               return (void *) probe_desc->event_desc[i];
                }
        }
        /* End of list */
@@ -120,6 +123,7 @@ void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos)
 static
 void tp_list_stop(struct seq_file *m, void *p)
 {
+       mutex_unlock(&probe_mutex);
 }
 
 static
@@ -127,6 +131,11 @@ int tp_list_show(struct seq_file *m, void *p)
 {
        const struct lttng_event_desc *probe_desc = p;
 
+       /*
+        * Don't export lttng internal events (metadata).
+        */
+       if (!strncmp(probe_desc->name, "lttng_", sizeof("lttng_") - 1))
+               return 0;
        seq_printf(m,   "event { name = %s; };\n",
                   probe_desc->name);
        return 0;
@@ -147,8 +156,9 @@ int lttng_tracepoint_list_open(struct inode *inode, struct file *file)
 }
 
 const struct file_operations lttng_tracepoint_list_fops = {
+       .owner = THIS_MODULE,
        .open = lttng_tracepoint_list_open,
        .read = seq_read,
        .llseek = seq_lseek,
-       .release = seq_release_private,
+       .release = seq_release,
 };
This page took 0.033075 seconds and 4 git commands to generate.