Fix: _lttng_kernel_event_create never returns NULL
[lttng-modules.git] / src / lttng-abi.c
index 533b5fb4a6083c12e01055a632ff005b1dfefb55..c0ab0a488d7cade60defda6404badfc2e7061059 100644 (file)
@@ -1912,7 +1912,7 @@ int lttng_abi_create_event(struct file *channel_file,
                lttng_fallthrough;
        case LTTNG_KERNEL_ABI_UPROBE:
        {
-               struct lttng_kernel_event_recorder *event;
+               struct lttng_kernel_event_common *event;
                struct lttng_event_recorder_enabler *event_enabler;
 
                event_enabler = lttng_event_recorder_enabler_create(LTTNG_ENABLER_FORMAT_NAME,
@@ -1925,14 +1925,14 @@ int lttng_abi_create_event(struct file *channel_file,
                 * We tolerate no failure path after event creation. It
                 * will stay invariant for the rest of the session.
                 */
-               event = lttng_kernel_event_recorder_create(event_enabler, NULL);
-               WARN_ON_ONCE(!event);
+               event = lttng_kernel_event_create(&event_enabler->parent, NULL);
+               WARN_ON_ONCE(IS_ERR(event));
                lttng_event_enabler_destroy(&event_enabler->parent);
                if (IS_ERR(event)) {
                        ret = PTR_ERR(event);
                        goto event_error;
                }
-               priv = event;
+               priv = container_of(event, struct lttng_kernel_event_recorder, parent);
                break;
        }
 
@@ -2132,15 +2132,17 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file,
                         * we create the special star globbing enabler.
                         */
                        enabler = lttng_event_notifier_enabler_create(
-                                       event_notifier_group,
                                        LTTNG_ENABLER_FORMAT_STAR_GLOB,
-                                       event_notifier_param);
+                                       event_notifier_param,
+                                       event_notifier_group);
                } else {
                        enabler = lttng_event_notifier_enabler_create(
-                                       event_notifier_group,
                                        LTTNG_ENABLER_FORMAT_NAME,
-                                       event_notifier_param);
+                                       event_notifier_param,
+                                       event_notifier_group);
                }
+               if (enabler)
+                       lttng_event_notifier_enabler_group_add(event_notifier_group, enabler);
                priv = enabler;
                break;
        }
@@ -2151,24 +2153,23 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file,
                lttng_fallthrough;
        case LTTNG_KERNEL_ABI_UPROBE:
        {
-               struct lttng_kernel_event_notifier *event_notifier;
+               struct lttng_kernel_event_common *event;
+               struct lttng_event_notifier_enabler *event_notifier_enabler;
 
-               /*
-                * We tolerate no failure path after event notifier creation.
-                * It will stay invariant for the rest of the session.
-                */
-               event_notifier = lttng_event_notifier_create(NULL,
-                               event_notifier_param->event.token,
-                               event_notifier_param->error_counter_index,
-                               event_notifier_group,
-                               event_notifier_param,
-                               event_notifier_param->event.instrumentation);
-               WARN_ON_ONCE(!event_notifier);
-               if (IS_ERR(event_notifier)) {
-                       ret = PTR_ERR(event_notifier);
+               event_notifier_enabler = lttng_event_notifier_enabler_create(LTTNG_ENABLER_FORMAT_NAME,
+                               event_notifier_param, event_notifier_group);
+               if (!event_notifier_enabler) {
+                       ret = -ENOMEM;
+                       goto event_notifier_error;
+               }
+               event = lttng_kernel_event_create(&event_notifier_enabler->parent, NULL);
+               WARN_ON_ONCE(IS_ERR(event));
+               lttng_event_enabler_destroy(&event_notifier_enabler->parent);
+               if (IS_ERR(event)) {
+                       ret = PTR_ERR(event);
                        goto event_notifier_error;
                }
-               priv = event_notifier;
+               priv = container_of(event, struct lttng_kernel_event_notifier, parent);
                break;
        }
 
@@ -2532,7 +2533,7 @@ old_ctx_end:
        case LTTNG_KERNEL_ABI_DISABLE:
                return lttng_channel_disable(&channel->parent);
        case LTTNG_KERNEL_ABI_SYSCALL_MASK:
-               return lttng_channel_syscall_mask(channel,
+               return lttng_syscall_table_get_active_mask(&channel->priv->parent.syscall_table,
                        (struct lttng_kernel_abi_syscall_mask __user *) arg);
        default:
                return -ENOIOCTLCMD;
This page took 0.025487 seconds and 4 git commands to generate.