X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-abi.c;h=caec803fe51e018f470ce03bb7003fbbaa73517f;hb=853f5b15987181812b9973d86607cb9d76c850b9;hp=c0ab0a488d7cade60defda6404badfc2e7061059;hpb=c3fb484e598a4c08aa096901b611af7311ad77ca;p=lttng-modules.git diff --git a/src/lttng-abi.c b/src/lttng-abi.c index c0ab0a48..caec803f 100644 --- a/src/lttng-abi.c +++ b/src/lttng-abi.c @@ -23,6 +23,7 @@ * - Takes instrumentation source specific arguments. */ +#include #include #include #include @@ -36,9 +37,7 @@ #include #include #include -#include #include -#include #include #include #include @@ -99,7 +98,7 @@ int lttng_abi_create_session(void) session = lttng_session_create(); if (!session) return -ENOMEM; - session_fd = lttng_get_unused_fd(); + session_fd = get_unused_fd_flags(0); if (session_fd < 0) { ret = session_fd; goto fd_error; @@ -141,7 +140,7 @@ int lttng_abi_create_event_notifier_group(void) if (!event_notifier_group) return -ENOMEM; - event_notifier_group_fd = lttng_get_unused_fd(); + event_notifier_group_fd = get_unused_fd_flags(0); if (event_notifier_group_fd < 0) { ret = event_notifier_group_fd; goto fd_error; @@ -174,7 +173,7 @@ int lttng_abi_tracepoint_list(void) struct file *tracepoint_list_file; int file_fd, ret; - file_fd = lttng_get_unused_fd(); + file_fd = get_unused_fd_flags(0); if (file_fd < 0) { ret = file_fd; goto fd_error; @@ -214,7 +213,7 @@ int lttng_abi_syscall_list(void) struct file *syscall_list_file; int file_fd, ret; - file_fd = lttng_get_unused_fd(); + file_fd = get_unused_fd_flags(0); if (file_fd < 0) { ret = file_fd; goto fd_error; @@ -497,7 +496,7 @@ int lttng_abi_create_channel(struct file *session_file, int chan_fd; int ret = 0; - chan_fd = lttng_get_unused_fd(); + chan_fd = get_unused_fd_flags(0); if (chan_fd < 0) { ret = chan_fd; goto fd_error; @@ -650,6 +649,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 +686,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 +719,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 +729,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; } } @@ -1011,7 +1015,7 @@ ssize_t lttng_event_notifier_group_notif_read(struct file *filp, char __user *us /* Finish copy of previous record */ if (*ppos != 0) { - if (read_count < count) { + if (count != 0) { len = chan->iter.len_left; read_offset = *ppos; goto skip_get_next; @@ -1091,7 +1095,8 @@ nodata: chan->iter.len_left = 0; put_record: - lib_ring_buffer_put_current_record(buf); + if (*ppos == 0) + lib_ring_buffer_put_current_record(buf); return read_count; } @@ -1597,7 +1602,7 @@ int lttng_abi_create_stream_fd(struct file *channel_file, void *stream_priv, int stream_fd, ret; struct file *stream_file; - stream_fd = lttng_get_unused_fd(); + stream_fd = get_unused_fd_flags(0); if (stream_fd < 0) { ret = stream_fd; goto fd_error; @@ -1862,7 +1867,7 @@ int lttng_abi_create_event(struct file *channel_file, return -EINVAL; } - event_fd = lttng_get_unused_fd(); + event_fd = get_unused_fd_flags(0); if (event_fd < 0) { ret = event_fd; goto fd_error; @@ -2096,7 +2101,7 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file, event_notifier_param->event.name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; - event_notifier_fd = lttng_get_unused_fd(); + event_notifier_fd = get_unused_fd_flags(0); if (event_notifier_fd < 0) { ret = event_notifier_fd; goto fd_error; @@ -2243,7 +2248,7 @@ long lttng_abi_event_notifier_group_create_error_counter( goto fd_error; } - counter_fd = lttng_get_unused_fd(); + counter_fd = get_unused_fd_flags(0); if (counter_fd < 0) { ret = counter_fd; goto fd_error; @@ -2277,7 +2282,7 @@ long lttng_abi_event_notifier_group_create_error_counter( * in record_error. Ensures the counter is created and the * error_counter_len is set before they are used. */ - lttng_smp_store_release(&event_notifier_group->error_counter, counter); + smp_store_release(&event_notifier_group->error_counter, counter); counter->file = counter_file; counter->owner = event_notifier_group->file;