X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-abi.c;h=c3e676902d787fe88c84d0ef034930f169cd4372;hb=43e623f93ffb9386165c2149705ee716ef88e3a5;hp=8eeb632a227c0c24f9fab902dbc386b2c4b12715;hpb=7b25ab0ebebea6eef31b687292db60eab4c6babc;p=lttng-modules.git diff --git a/src/lttng-abi.c b/src/lttng-abi.c index 8eeb632a..c3e67690 100644 --- a/src/lttng-abi.c +++ b/src/lttng-abi.c @@ -550,7 +550,7 @@ int lttng_abi_create_channel(struct file *session_file, * We tolerate no failure path after channel creation. It will stay * invariant for the rest of the session. */ - chan = lttng_channel_create(session, transport_name, NULL, + chan = lttng_channel_buffer_create(session, transport_name, NULL, chan_param->subbuf_size, chan_param->num_subbuf, chan_param->switch_timer_interval, @@ -650,6 +650,8 @@ long lttng_counter_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (validate_zeroed_padding(local_counter_read.padding, sizeof(local_counter_read.padding))) return -EINVAL; + if (local_counter_read.index.number_dimensions > LTTNG_KERNEL_ABI_COUNTER_DIMENSION_MAX) + return -EINVAL; /* Cast all indexes into size_t. */ for (i = 0; i < local_counter_read.index.number_dimensions; i++) @@ -685,6 +687,8 @@ long lttng_counter_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (validate_zeroed_padding(local_counter_aggregate.padding, sizeof(local_counter_aggregate.padding))) return -EINVAL; + if (local_counter_aggregate.index.number_dimensions > LTTNG_KERNEL_ABI_COUNTER_DIMENSION_MAX) + return -EINVAL; /* Cast all indexes into size_t. */ for (i = 0; i < local_counter_aggregate.index.number_dimensions; i++) @@ -716,6 +720,8 @@ long lttng_counter_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (validate_zeroed_padding(local_counter_clear.padding, sizeof(local_counter_clear.padding))) return -EINVAL; + if (local_counter_clear.index.number_dimensions > LTTNG_KERNEL_ABI_COUNTER_DIMENSION_MAX) + return -EINVAL; /* Cast all indexes into size_t. */ for (i = 0; i < local_counter_clear.index.number_dimensions; i++) @@ -724,7 +730,6 @@ long lttng_counter_ioctl(struct file *file, unsigned int cmd, unsigned long arg) return lttng_kernel_counter_clear(counter, indexes); } default: - WARN_ON_ONCE(1); return -ENOSYS; } } @@ -1912,7 +1917,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 +1930,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); - lttng_event_enabler_destroy(event_enabler); + 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 +2137,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 +2158,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; } @@ -2527,12 +2533,12 @@ old_ctx_end: } case LTTNG_KERNEL_ABI_OLD_ENABLE: case LTTNG_KERNEL_ABI_ENABLE: - return lttng_channel_enable(channel); + return lttng_channel_enable(&channel->parent); case LTTNG_KERNEL_ABI_OLD_DISABLE: case LTTNG_KERNEL_ABI_DISABLE: - return lttng_channel_disable(channel); + 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;