xref: /openbmc/linux/kernel/trace/trace_events_user.c (revision 2467cda1b5c97a58776a8aebfa5d76543e47479d)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2021, Microsoft Corporation.
4  *
5  * Authors:
6  *   Beau Belgrave <beaub@linux.microsoft.com>
7  */
8 
9 #include <linux/bitmap.h>
10 #include <linux/cdev.h>
11 #include <linux/hashtable.h>
12 #include <linux/list.h>
13 #include <linux/io.h>
14 #include <linux/uio.h>
15 #include <linux/ioctl.h>
16 #include <linux/jhash.h>
17 #include <linux/trace_events.h>
18 #include <linux/tracefs.h>
19 #include <linux/types.h>
20 #include <linux/uaccess.h>
21 #include <uapi/linux/user_events.h>
22 #include "trace.h"
23 #include "trace_dynevent.h"
24 
25 #define USER_EVENTS_PREFIX_LEN (sizeof(USER_EVENTS_PREFIX)-1)
26 
27 #define FIELD_DEPTH_TYPE 0
28 #define FIELD_DEPTH_NAME 1
29 #define FIELD_DEPTH_SIZE 2
30 
31 /*
32  * Limits how many trace_event calls user processes can create:
33  * Must be multiple of PAGE_SIZE.
34  */
35 #define MAX_PAGES 1
36 #define MAX_EVENTS (MAX_PAGES * PAGE_SIZE)
37 
38 /* Limit how long of an event name plus args within the subsystem. */
39 #define MAX_EVENT_DESC 512
40 #define EVENT_NAME(user_event) ((user_event)->tracepoint.name)
41 #define MAX_FIELD_ARRAY_SIZE 1024
42 #define MAX_FIELD_ARG_NAME 256
43 
44 #define MAX_BPF_COPY_SIZE PAGE_SIZE
45 #define MAX_STACK_BPF_DATA 512
46 
47 static char *register_page_data;
48 
49 static DEFINE_MUTEX(reg_mutex);
50 static DEFINE_HASHTABLE(register_table, 4);
51 static DECLARE_BITMAP(page_bitmap, MAX_EVENTS);
52 
53 /*
54  * Stores per-event properties, as users register events
55  * within a file a user_event might be created if it does not
56  * already exist. These are globally used and their lifetime
57  * is tied to the refcnt member. These cannot go away until the
58  * refcnt reaches zero.
59  */
60 struct user_event {
61 	struct tracepoint tracepoint;
62 	struct trace_event_call call;
63 	struct trace_event_class class;
64 	struct dyn_event devent;
65 	struct hlist_node node;
66 	struct list_head fields;
67 	struct list_head validators;
68 	atomic_t refcnt;
69 	int index;
70 	int flags;
71 	int min_size;
72 };
73 
74 /*
75  * Stores per-file events references, as users register events
76  * within a file this structure is modified and freed via RCU.
77  * The lifetime of this struct is tied to the lifetime of the file.
78  * These are not shared and only accessible by the file that created it.
79  */
80 struct user_event_refs {
81 	struct rcu_head rcu;
82 	int count;
83 	struct user_event *events[];
84 };
85 
86 #define VALIDATOR_ENSURE_NULL (1 << 0)
87 #define VALIDATOR_REL (1 << 1)
88 
89 struct user_event_validator {
90 	struct list_head link;
91 	int offset;
92 	int flags;
93 };
94 
95 typedef void (*user_event_func_t) (struct user_event *user, struct iov_iter *i,
96 				   void *tpdata, bool *faulted);
97 
98 static int user_event_parse(char *name, char *args, char *flags,
99 			    struct user_event **newuser);
100 
101 static u32 user_event_key(char *name)
102 {
103 	return jhash(name, strlen(name), 0);
104 }
105 
106 static __always_inline __must_check
107 size_t copy_nofault(void *addr, size_t bytes, struct iov_iter *i)
108 {
109 	size_t ret;
110 
111 	pagefault_disable();
112 
113 	ret = copy_from_iter_nocache(addr, bytes, i);
114 
115 	pagefault_enable();
116 
117 	return ret;
118 }
119 
120 static struct list_head *user_event_get_fields(struct trace_event_call *call)
121 {
122 	struct user_event *user = (struct user_event *)call->data;
123 
124 	return &user->fields;
125 }
126 
127 /*
128  * Parses a register command for user_events
129  * Format: event_name[:FLAG1[,FLAG2...]] [field1[;field2...]]
130  *
131  * Example event named 'test' with a 20 char 'msg' field with an unsigned int
132  * 'id' field after:
133  * test char[20] msg;unsigned int id
134  *
135  * NOTE: Offsets are from the user data perspective, they are not from the
136  * trace_entry/buffer perspective. We automatically add the common properties
137  * sizes to the offset for the user.
138  */
139 static int user_event_parse_cmd(char *raw_command, struct user_event **newuser)
140 {
141 	char *name = raw_command;
142 	char *args = strpbrk(name, " ");
143 	char *flags;
144 
145 	if (args)
146 		*args++ = '\0';
147 
148 	flags = strpbrk(name, ":");
149 
150 	if (flags)
151 		*flags++ = '\0';
152 
153 	return user_event_parse(name, args, flags, newuser);
154 }
155 
156 static int user_field_array_size(const char *type)
157 {
158 	const char *start = strchr(type, '[');
159 	char val[8];
160 	char *bracket;
161 	int size = 0;
162 
163 	if (start == NULL)
164 		return -EINVAL;
165 
166 	if (strscpy(val, start + 1, sizeof(val)) <= 0)
167 		return -EINVAL;
168 
169 	bracket = strchr(val, ']');
170 
171 	if (!bracket)
172 		return -EINVAL;
173 
174 	*bracket = '\0';
175 
176 	if (kstrtouint(val, 0, &size))
177 		return -EINVAL;
178 
179 	if (size > MAX_FIELD_ARRAY_SIZE)
180 		return -EINVAL;
181 
182 	return size;
183 }
184 
185 static int user_field_size(const char *type)
186 {
187 	/* long is not allowed from a user, since it's ambigious in size */
188 	if (strcmp(type, "s64") == 0)
189 		return sizeof(s64);
190 	if (strcmp(type, "u64") == 0)
191 		return sizeof(u64);
192 	if (strcmp(type, "s32") == 0)
193 		return sizeof(s32);
194 	if (strcmp(type, "u32") == 0)
195 		return sizeof(u32);
196 	if (strcmp(type, "int") == 0)
197 		return sizeof(int);
198 	if (strcmp(type, "unsigned int") == 0)
199 		return sizeof(unsigned int);
200 	if (strcmp(type, "s16") == 0)
201 		return sizeof(s16);
202 	if (strcmp(type, "u16") == 0)
203 		return sizeof(u16);
204 	if (strcmp(type, "short") == 0)
205 		return sizeof(short);
206 	if (strcmp(type, "unsigned short") == 0)
207 		return sizeof(unsigned short);
208 	if (strcmp(type, "s8") == 0)
209 		return sizeof(s8);
210 	if (strcmp(type, "u8") == 0)
211 		return sizeof(u8);
212 	if (strcmp(type, "char") == 0)
213 		return sizeof(char);
214 	if (strcmp(type, "unsigned char") == 0)
215 		return sizeof(unsigned char);
216 	if (str_has_prefix(type, "char["))
217 		return user_field_array_size(type);
218 	if (str_has_prefix(type, "unsigned char["))
219 		return user_field_array_size(type);
220 	if (str_has_prefix(type, "__data_loc "))
221 		return sizeof(u32);
222 	if (str_has_prefix(type, "__rel_loc "))
223 		return sizeof(u32);
224 
225 	/* Uknown basic type, error */
226 	return -EINVAL;
227 }
228 
229 static void user_event_destroy_validators(struct user_event *user)
230 {
231 	struct user_event_validator *validator, *next;
232 	struct list_head *head = &user->validators;
233 
234 	list_for_each_entry_safe(validator, next, head, link) {
235 		list_del(&validator->link);
236 		kfree(validator);
237 	}
238 }
239 
240 static void user_event_destroy_fields(struct user_event *user)
241 {
242 	struct ftrace_event_field *field, *next;
243 	struct list_head *head = &user->fields;
244 
245 	list_for_each_entry_safe(field, next, head, link) {
246 		list_del(&field->link);
247 		kfree(field);
248 	}
249 }
250 
251 static int user_event_add_field(struct user_event *user, const char *type,
252 				const char *name, int offset, int size,
253 				int is_signed, int filter_type)
254 {
255 	struct user_event_validator *validator;
256 	struct ftrace_event_field *field;
257 	int validator_flags = 0;
258 
259 	field = kmalloc(sizeof(*field), GFP_KERNEL);
260 
261 	if (!field)
262 		return -ENOMEM;
263 
264 	if (str_has_prefix(type, "__data_loc "))
265 		goto add_validator;
266 
267 	if (str_has_prefix(type, "__rel_loc ")) {
268 		validator_flags |= VALIDATOR_REL;
269 		goto add_validator;
270 	}
271 
272 	goto add_field;
273 
274 add_validator:
275 	if (strstr(type, "char") != 0)
276 		validator_flags |= VALIDATOR_ENSURE_NULL;
277 
278 	validator = kmalloc(sizeof(*validator), GFP_KERNEL);
279 
280 	if (!validator) {
281 		kfree(field);
282 		return -ENOMEM;
283 	}
284 
285 	validator->flags = validator_flags;
286 	validator->offset = offset;
287 
288 	/* Want sequential access when validating */
289 	list_add_tail(&validator->link, &user->validators);
290 
291 add_field:
292 	field->type = type;
293 	field->name = name;
294 	field->offset = offset;
295 	field->size = size;
296 	field->is_signed = is_signed;
297 	field->filter_type = filter_type;
298 
299 	list_add(&field->link, &user->fields);
300 
301 	/*
302 	 * Min size from user writes that are required, this does not include
303 	 * the size of trace_entry (common fields).
304 	 */
305 	user->min_size = (offset + size) - sizeof(struct trace_entry);
306 
307 	return 0;
308 }
309 
310 /*
311  * Parses the values of a field within the description
312  * Format: type name [size]
313  */
314 static int user_event_parse_field(char *field, struct user_event *user,
315 				  u32 *offset)
316 {
317 	char *part, *type, *name;
318 	u32 depth = 0, saved_offset = *offset;
319 	int len, size = -EINVAL;
320 	bool is_struct = false;
321 
322 	field = skip_spaces(field);
323 
324 	if (*field == '\0')
325 		return 0;
326 
327 	/* Handle types that have a space within */
328 	len = str_has_prefix(field, "unsigned ");
329 	if (len)
330 		goto skip_next;
331 
332 	len = str_has_prefix(field, "struct ");
333 	if (len) {
334 		is_struct = true;
335 		goto skip_next;
336 	}
337 
338 	len = str_has_prefix(field, "__data_loc unsigned ");
339 	if (len)
340 		goto skip_next;
341 
342 	len = str_has_prefix(field, "__data_loc ");
343 	if (len)
344 		goto skip_next;
345 
346 	len = str_has_prefix(field, "__rel_loc unsigned ");
347 	if (len)
348 		goto skip_next;
349 
350 	len = str_has_prefix(field, "__rel_loc ");
351 	if (len)
352 		goto skip_next;
353 
354 	goto parse;
355 skip_next:
356 	type = field;
357 	field = strpbrk(field + len, " ");
358 
359 	if (field == NULL)
360 		return -EINVAL;
361 
362 	*field++ = '\0';
363 	depth++;
364 parse:
365 	while ((part = strsep(&field, " ")) != NULL) {
366 		switch (depth++) {
367 		case FIELD_DEPTH_TYPE:
368 			type = part;
369 			break;
370 		case FIELD_DEPTH_NAME:
371 			name = part;
372 			break;
373 		case FIELD_DEPTH_SIZE:
374 			if (!is_struct)
375 				return -EINVAL;
376 
377 			if (kstrtou32(part, 10, &size))
378 				return -EINVAL;
379 			break;
380 		default:
381 			return -EINVAL;
382 		}
383 	}
384 
385 	if (depth < FIELD_DEPTH_SIZE)
386 		return -EINVAL;
387 
388 	if (depth == FIELD_DEPTH_SIZE)
389 		size = user_field_size(type);
390 
391 	if (size == 0)
392 		return -EINVAL;
393 
394 	if (size < 0)
395 		return size;
396 
397 	*offset = saved_offset + size;
398 
399 	return user_event_add_field(user, type, name, saved_offset, size,
400 				    type[0] != 'u', FILTER_OTHER);
401 }
402 
403 static void user_event_parse_flags(struct user_event *user, char *flags)
404 {
405 	char *flag;
406 
407 	if (flags == NULL)
408 		return;
409 
410 	while ((flag = strsep(&flags, ",")) != NULL) {
411 		if (strcmp(flag, "BPF_ITER") == 0)
412 			user->flags |= FLAG_BPF_ITER;
413 	}
414 }
415 
416 static int user_event_parse_fields(struct user_event *user, char *args)
417 {
418 	char *field;
419 	u32 offset = sizeof(struct trace_entry);
420 	int ret = -EINVAL;
421 
422 	if (args == NULL)
423 		return 0;
424 
425 	while ((field = strsep(&args, ";")) != NULL) {
426 		ret = user_event_parse_field(field, user, &offset);
427 
428 		if (ret)
429 			break;
430 	}
431 
432 	return ret;
433 }
434 
435 static struct trace_event_fields user_event_fields_array[1];
436 
437 static const char *user_field_format(const char *type)
438 {
439 	if (strcmp(type, "s64") == 0)
440 		return "%lld";
441 	if (strcmp(type, "u64") == 0)
442 		return "%llu";
443 	if (strcmp(type, "s32") == 0)
444 		return "%d";
445 	if (strcmp(type, "u32") == 0)
446 		return "%u";
447 	if (strcmp(type, "int") == 0)
448 		return "%d";
449 	if (strcmp(type, "unsigned int") == 0)
450 		return "%u";
451 	if (strcmp(type, "s16") == 0)
452 		return "%d";
453 	if (strcmp(type, "u16") == 0)
454 		return "%u";
455 	if (strcmp(type, "short") == 0)
456 		return "%d";
457 	if (strcmp(type, "unsigned short") == 0)
458 		return "%u";
459 	if (strcmp(type, "s8") == 0)
460 		return "%d";
461 	if (strcmp(type, "u8") == 0)
462 		return "%u";
463 	if (strcmp(type, "char") == 0)
464 		return "%d";
465 	if (strcmp(type, "unsigned char") == 0)
466 		return "%u";
467 	if (strstr(type, "char[") != 0)
468 		return "%s";
469 
470 	/* Unknown, likely struct, allowed treat as 64-bit */
471 	return "%llu";
472 }
473 
474 static bool user_field_is_dyn_string(const char *type, const char **str_func)
475 {
476 	if (str_has_prefix(type, "__data_loc ")) {
477 		*str_func = "__get_str";
478 		goto check;
479 	}
480 
481 	if (str_has_prefix(type, "__rel_loc ")) {
482 		*str_func = "__get_rel_str";
483 		goto check;
484 	}
485 
486 	return false;
487 check:
488 	return strstr(type, "char") != 0;
489 }
490 
491 #define LEN_OR_ZERO (len ? len - pos : 0)
492 static int user_event_set_print_fmt(struct user_event *user, char *buf, int len)
493 {
494 	struct ftrace_event_field *field, *next;
495 	struct list_head *head = &user->fields;
496 	int pos = 0, depth = 0;
497 	const char *str_func;
498 
499 	pos += snprintf(buf + pos, LEN_OR_ZERO, "\"");
500 
501 	list_for_each_entry_safe_reverse(field, next, head, link) {
502 		if (depth != 0)
503 			pos += snprintf(buf + pos, LEN_OR_ZERO, " ");
504 
505 		pos += snprintf(buf + pos, LEN_OR_ZERO, "%s=%s",
506 				field->name, user_field_format(field->type));
507 
508 		depth++;
509 	}
510 
511 	pos += snprintf(buf + pos, LEN_OR_ZERO, "\"");
512 
513 	list_for_each_entry_safe_reverse(field, next, head, link) {
514 		if (user_field_is_dyn_string(field->type, &str_func))
515 			pos += snprintf(buf + pos, LEN_OR_ZERO,
516 					", %s(%s)", str_func, field->name);
517 		else
518 			pos += snprintf(buf + pos, LEN_OR_ZERO,
519 					", REC->%s", field->name);
520 	}
521 
522 	return pos + 1;
523 }
524 #undef LEN_OR_ZERO
525 
526 static int user_event_create_print_fmt(struct user_event *user)
527 {
528 	char *print_fmt;
529 	int len;
530 
531 	len = user_event_set_print_fmt(user, NULL, 0);
532 
533 	print_fmt = kmalloc(len, GFP_KERNEL);
534 
535 	if (!print_fmt)
536 		return -ENOMEM;
537 
538 	user_event_set_print_fmt(user, print_fmt, len);
539 
540 	user->call.print_fmt = print_fmt;
541 
542 	return 0;
543 }
544 
545 static enum print_line_t user_event_print_trace(struct trace_iterator *iter,
546 						int flags,
547 						struct trace_event *event)
548 {
549 	/* Unsafe to try to decode user provided print_fmt, use hex */
550 	trace_print_hex_dump_seq(&iter->seq, "", DUMP_PREFIX_OFFSET, 16,
551 				 1, iter->ent, iter->ent_size, true);
552 
553 	return trace_handle_return(&iter->seq);
554 }
555 
556 static struct trace_event_functions user_event_funcs = {
557 	.trace = user_event_print_trace,
558 };
559 
560 static int destroy_user_event(struct user_event *user)
561 {
562 	int ret = 0;
563 
564 	/* Must destroy fields before call removal */
565 	user_event_destroy_fields(user);
566 
567 	ret = trace_remove_event_call(&user->call);
568 
569 	if (ret)
570 		return ret;
571 
572 	dyn_event_remove(&user->devent);
573 
574 	register_page_data[user->index] = 0;
575 	clear_bit(user->index, page_bitmap);
576 	hash_del(&user->node);
577 
578 	user_event_destroy_validators(user);
579 	kfree(user->call.print_fmt);
580 	kfree(EVENT_NAME(user));
581 	kfree(user);
582 
583 	return ret;
584 }
585 
586 static struct user_event *find_user_event(char *name, u32 *outkey)
587 {
588 	struct user_event *user;
589 	u32 key = user_event_key(name);
590 
591 	*outkey = key;
592 
593 	hash_for_each_possible(register_table, user, node, key)
594 		if (!strcmp(EVENT_NAME(user), name))
595 			return user;
596 
597 	return NULL;
598 }
599 
600 static int user_event_validate(struct user_event *user, void *data, int len)
601 {
602 	struct list_head *head = &user->validators;
603 	struct user_event_validator *validator;
604 	void *pos, *end = data + len;
605 	u32 loc, offset, size;
606 
607 	list_for_each_entry(validator, head, link) {
608 		pos = data + validator->offset;
609 
610 		/* Already done min_size check, no bounds check here */
611 		loc = *(u32 *)pos;
612 		offset = loc & 0xffff;
613 		size = loc >> 16;
614 
615 		if (likely(validator->flags & VALIDATOR_REL))
616 			pos += offset + sizeof(loc);
617 		else
618 			pos = data + offset;
619 
620 		pos += size;
621 
622 		if (unlikely(pos > end))
623 			return -EFAULT;
624 
625 		if (likely(validator->flags & VALIDATOR_ENSURE_NULL))
626 			if (unlikely(*(char *)(pos - 1) != '\0'))
627 				return -EFAULT;
628 	}
629 
630 	return 0;
631 }
632 
633 /*
634  * Writes the user supplied payload out to a trace file.
635  */
636 static void user_event_ftrace(struct user_event *user, struct iov_iter *i,
637 			      void *tpdata, bool *faulted)
638 {
639 	struct trace_event_file *file;
640 	struct trace_entry *entry;
641 	struct trace_event_buffer event_buffer;
642 	size_t size = sizeof(*entry) + i->count;
643 
644 	file = (struct trace_event_file *)tpdata;
645 
646 	if (!file ||
647 	    !(file->flags & EVENT_FILE_FL_ENABLED) ||
648 	    trace_trigger_soft_disabled(file))
649 		return;
650 
651 	/* Allocates and fills trace_entry, + 1 of this is data payload */
652 	entry = trace_event_buffer_reserve(&event_buffer, file, size);
653 
654 	if (unlikely(!entry))
655 		return;
656 
657 	if (unlikely(!copy_nofault(entry + 1, i->count, i)))
658 		goto discard;
659 
660 	if (!list_empty(&user->validators) &&
661 	    unlikely(user_event_validate(user, entry, size)))
662 		goto discard;
663 
664 	trace_event_buffer_commit(&event_buffer);
665 
666 	return;
667 discard:
668 	*faulted = true;
669 	__trace_event_discard_commit(event_buffer.buffer,
670 				     event_buffer.event);
671 }
672 
673 #ifdef CONFIG_PERF_EVENTS
674 static void user_event_bpf(struct user_event *user, struct iov_iter *i)
675 {
676 	struct user_bpf_context context;
677 	struct user_bpf_iter bpf_i;
678 	char fast_data[MAX_STACK_BPF_DATA];
679 	void *temp = NULL;
680 
681 	if ((user->flags & FLAG_BPF_ITER) && iter_is_iovec(i)) {
682 		/* Raw iterator */
683 		context.data_type = USER_BPF_DATA_ITER;
684 		context.data_len = i->count;
685 		context.iter = &bpf_i;
686 
687 		bpf_i.iov_offset = i->iov_offset;
688 		bpf_i.iov = i->iov;
689 		bpf_i.nr_segs = i->nr_segs;
690 	} else if (i->nr_segs == 1 && iter_is_iovec(i)) {
691 		/* Single buffer from user */
692 		context.data_type = USER_BPF_DATA_USER;
693 		context.data_len = i->count;
694 		context.udata = i->iov->iov_base + i->iov_offset;
695 	} else {
696 		/* Multi buffer from user */
697 		struct iov_iter copy = *i;
698 		size_t copy_size = min_t(size_t, i->count, MAX_BPF_COPY_SIZE);
699 
700 		context.data_type = USER_BPF_DATA_KERNEL;
701 		context.kdata = fast_data;
702 
703 		if (unlikely(copy_size > sizeof(fast_data))) {
704 			temp = kmalloc(copy_size, GFP_NOWAIT);
705 
706 			if (temp)
707 				context.kdata = temp;
708 			else
709 				copy_size = sizeof(fast_data);
710 		}
711 
712 		context.data_len = copy_nofault(context.kdata,
713 						copy_size, &copy);
714 	}
715 
716 	trace_call_bpf(&user->call, &context);
717 
718 	kfree(temp);
719 }
720 
721 /*
722  * Writes the user supplied payload out to perf ring buffer or eBPF program.
723  */
724 static void user_event_perf(struct user_event *user, struct iov_iter *i,
725 			    void *tpdata, bool *faulted)
726 {
727 	struct hlist_head *perf_head;
728 
729 	if (bpf_prog_array_valid(&user->call))
730 		user_event_bpf(user, i);
731 
732 	perf_head = this_cpu_ptr(user->call.perf_events);
733 
734 	if (perf_head && !hlist_empty(perf_head)) {
735 		struct trace_entry *perf_entry;
736 		struct pt_regs *regs;
737 		size_t size = sizeof(*perf_entry) + i->count;
738 		int context;
739 
740 		perf_entry = perf_trace_buf_alloc(ALIGN(size, 8),
741 						  &regs, &context);
742 
743 		if (unlikely(!perf_entry))
744 			return;
745 
746 		perf_fetch_caller_regs(regs);
747 
748 		if (unlikely(!copy_nofault(perf_entry + 1, i->count, i)))
749 			goto discard;
750 
751 		if (!list_empty(&user->validators) &&
752 		    unlikely(user_event_validate(user, perf_entry, size)))
753 			goto discard;
754 
755 		perf_trace_buf_submit(perf_entry, size, context,
756 				      user->call.event.type, 1, regs,
757 				      perf_head, NULL);
758 
759 		return;
760 discard:
761 		*faulted = true;
762 		perf_swevent_put_recursion_context(context);
763 	}
764 }
765 #endif
766 
767 /*
768  * Update the register page that is shared between user processes.
769  */
770 static void update_reg_page_for(struct user_event *user)
771 {
772 	struct tracepoint *tp = &user->tracepoint;
773 	char status = 0;
774 
775 	if (atomic_read(&tp->key.enabled) > 0) {
776 		struct tracepoint_func *probe_func_ptr;
777 		user_event_func_t probe_func;
778 
779 		rcu_read_lock_sched();
780 
781 		probe_func_ptr = rcu_dereference_sched(tp->funcs);
782 
783 		if (probe_func_ptr) {
784 			do {
785 				probe_func = probe_func_ptr->func;
786 
787 				if (probe_func == user_event_ftrace)
788 					status |= EVENT_STATUS_FTRACE;
789 #ifdef CONFIG_PERF_EVENTS
790 				else if (probe_func == user_event_perf)
791 					status |= EVENT_STATUS_PERF;
792 #endif
793 				else
794 					status |= EVENT_STATUS_OTHER;
795 			} while ((++probe_func_ptr)->func);
796 		}
797 
798 		rcu_read_unlock_sched();
799 	}
800 
801 	register_page_data[user->index] = status;
802 }
803 
804 /*
805  * Register callback for our events from tracing sub-systems.
806  */
807 static int user_event_reg(struct trace_event_call *call,
808 			  enum trace_reg type,
809 			  void *data)
810 {
811 	struct user_event *user = (struct user_event *)call->data;
812 	int ret = 0;
813 
814 	if (!user)
815 		return -ENOENT;
816 
817 	switch (type) {
818 	case TRACE_REG_REGISTER:
819 		ret = tracepoint_probe_register(call->tp,
820 						call->class->probe,
821 						data);
822 		if (!ret)
823 			goto inc;
824 		break;
825 
826 	case TRACE_REG_UNREGISTER:
827 		tracepoint_probe_unregister(call->tp,
828 					    call->class->probe,
829 					    data);
830 		goto dec;
831 
832 #ifdef CONFIG_PERF_EVENTS
833 	case TRACE_REG_PERF_REGISTER:
834 		ret = tracepoint_probe_register(call->tp,
835 						call->class->perf_probe,
836 						data);
837 		if (!ret)
838 			goto inc;
839 		break;
840 
841 	case TRACE_REG_PERF_UNREGISTER:
842 		tracepoint_probe_unregister(call->tp,
843 					    call->class->perf_probe,
844 					    data);
845 		goto dec;
846 
847 	case TRACE_REG_PERF_OPEN:
848 	case TRACE_REG_PERF_CLOSE:
849 	case TRACE_REG_PERF_ADD:
850 	case TRACE_REG_PERF_DEL:
851 		break;
852 #endif
853 	}
854 
855 	return ret;
856 inc:
857 	atomic_inc(&user->refcnt);
858 	update_reg_page_for(user);
859 	return 0;
860 dec:
861 	update_reg_page_for(user);
862 	atomic_dec(&user->refcnt);
863 	return 0;
864 }
865 
866 static int user_event_create(const char *raw_command)
867 {
868 	struct user_event *user;
869 	char *name;
870 	int ret;
871 
872 	if (!str_has_prefix(raw_command, USER_EVENTS_PREFIX))
873 		return -ECANCELED;
874 
875 	raw_command += USER_EVENTS_PREFIX_LEN;
876 	raw_command = skip_spaces(raw_command);
877 
878 	name = kstrdup(raw_command, GFP_KERNEL);
879 
880 	if (!name)
881 		return -ENOMEM;
882 
883 	mutex_lock(&reg_mutex);
884 	ret = user_event_parse_cmd(name, &user);
885 	mutex_unlock(&reg_mutex);
886 
887 	if (ret)
888 		kfree(name);
889 
890 	return ret;
891 }
892 
893 static int user_event_show(struct seq_file *m, struct dyn_event *ev)
894 {
895 	struct user_event *user = container_of(ev, struct user_event, devent);
896 	struct ftrace_event_field *field, *next;
897 	struct list_head *head;
898 	int depth = 0;
899 
900 	seq_printf(m, "%s%s", USER_EVENTS_PREFIX, EVENT_NAME(user));
901 
902 	head = trace_get_fields(&user->call);
903 
904 	list_for_each_entry_safe_reverse(field, next, head, link) {
905 		if (depth == 0)
906 			seq_puts(m, " ");
907 		else
908 			seq_puts(m, "; ");
909 
910 		seq_printf(m, "%s %s", field->type, field->name);
911 
912 		if (str_has_prefix(field->type, "struct "))
913 			seq_printf(m, " %d", field->size);
914 
915 		depth++;
916 	}
917 
918 	seq_puts(m, "\n");
919 
920 	return 0;
921 }
922 
923 static bool user_event_is_busy(struct dyn_event *ev)
924 {
925 	struct user_event *user = container_of(ev, struct user_event, devent);
926 
927 	return atomic_read(&user->refcnt) != 0;
928 }
929 
930 static int user_event_free(struct dyn_event *ev)
931 {
932 	struct user_event *user = container_of(ev, struct user_event, devent);
933 
934 	if (atomic_read(&user->refcnt) != 0)
935 		return -EBUSY;
936 
937 	return destroy_user_event(user);
938 }
939 
940 static bool user_field_match(struct ftrace_event_field *field, int argc,
941 			     const char **argv, int *iout)
942 {
943 	char *field_name, *arg_name;
944 	int len, pos, i = *iout;
945 	bool colon = false, match = false;
946 
947 	if (i >= argc)
948 		return false;
949 
950 	len = MAX_FIELD_ARG_NAME;
951 	field_name = kmalloc(len, GFP_KERNEL);
952 	arg_name = kmalloc(len, GFP_KERNEL);
953 
954 	if (!arg_name || !field_name)
955 		goto out;
956 
957 	pos = 0;
958 
959 	for (; i < argc; ++i) {
960 		if (i != *iout)
961 			pos += snprintf(arg_name + pos, len - pos, " ");
962 
963 		pos += snprintf(arg_name + pos, len - pos, argv[i]);
964 
965 		if (strchr(argv[i], ';')) {
966 			++i;
967 			colon = true;
968 			break;
969 		}
970 	}
971 
972 	pos = 0;
973 
974 	pos += snprintf(field_name + pos, len - pos, field->type);
975 	pos += snprintf(field_name + pos, len - pos, " ");
976 	pos += snprintf(field_name + pos, len - pos, field->name);
977 
978 	if (colon)
979 		pos += snprintf(field_name + pos, len - pos, ";");
980 
981 	*iout = i;
982 
983 	match = strcmp(arg_name, field_name) == 0;
984 out:
985 	kfree(arg_name);
986 	kfree(field_name);
987 
988 	return match;
989 }
990 
991 static bool user_fields_match(struct user_event *user, int argc,
992 			      const char **argv)
993 {
994 	struct ftrace_event_field *field, *next;
995 	struct list_head *head = &user->fields;
996 	int i = 0;
997 
998 	list_for_each_entry_safe_reverse(field, next, head, link)
999 		if (!user_field_match(field, argc, argv, &i))
1000 			return false;
1001 
1002 	if (i != argc)
1003 		return false;
1004 
1005 	return true;
1006 }
1007 
1008 static bool user_event_match(const char *system, const char *event,
1009 			     int argc, const char **argv, struct dyn_event *ev)
1010 {
1011 	struct user_event *user = container_of(ev, struct user_event, devent);
1012 	bool match;
1013 
1014 	match = strcmp(EVENT_NAME(user), event) == 0 &&
1015 		(!system || strcmp(system, USER_EVENTS_SYSTEM) == 0);
1016 
1017 	if (match && argc > 0)
1018 		match = user_fields_match(user, argc, argv);
1019 
1020 	return match;
1021 }
1022 
1023 static struct dyn_event_operations user_event_dops = {
1024 	.create = user_event_create,
1025 	.show = user_event_show,
1026 	.is_busy = user_event_is_busy,
1027 	.free = user_event_free,
1028 	.match = user_event_match,
1029 };
1030 
1031 static int user_event_trace_register(struct user_event *user)
1032 {
1033 	int ret;
1034 
1035 	ret = register_trace_event(&user->call.event);
1036 
1037 	if (!ret)
1038 		return -ENODEV;
1039 
1040 	ret = trace_add_event_call(&user->call);
1041 
1042 	if (ret)
1043 		unregister_trace_event(&user->call.event);
1044 
1045 	return ret;
1046 }
1047 
1048 /*
1049  * Parses the event name, arguments and flags then registers if successful.
1050  * The name buffer lifetime is owned by this method for success cases only.
1051  */
1052 static int user_event_parse(char *name, char *args, char *flags,
1053 			    struct user_event **newuser)
1054 {
1055 	int ret;
1056 	int index;
1057 	u32 key;
1058 	struct user_event *user = find_user_event(name, &key);
1059 
1060 	if (user) {
1061 		*newuser = user;
1062 		/*
1063 		 * Name is allocated by caller, free it since it already exists.
1064 		 * Caller only worries about failure cases for freeing.
1065 		 */
1066 		kfree(name);
1067 		return 0;
1068 	}
1069 
1070 	index = find_first_zero_bit(page_bitmap, MAX_EVENTS);
1071 
1072 	if (index == MAX_EVENTS)
1073 		return -EMFILE;
1074 
1075 	user = kzalloc(sizeof(*user), GFP_KERNEL);
1076 
1077 	if (!user)
1078 		return -ENOMEM;
1079 
1080 	INIT_LIST_HEAD(&user->class.fields);
1081 	INIT_LIST_HEAD(&user->fields);
1082 	INIT_LIST_HEAD(&user->validators);
1083 
1084 	user->tracepoint.name = name;
1085 
1086 	user_event_parse_flags(user, flags);
1087 
1088 	ret = user_event_parse_fields(user, args);
1089 
1090 	if (ret)
1091 		goto put_user;
1092 
1093 	ret = user_event_create_print_fmt(user);
1094 
1095 	if (ret)
1096 		goto put_user;
1097 
1098 	user->call.data = user;
1099 	user->call.class = &user->class;
1100 	user->call.name = name;
1101 	user->call.flags = TRACE_EVENT_FL_TRACEPOINT;
1102 	user->call.tp = &user->tracepoint;
1103 	user->call.event.funcs = &user_event_funcs;
1104 
1105 	user->class.system = USER_EVENTS_SYSTEM;
1106 	user->class.fields_array = user_event_fields_array;
1107 	user->class.get_fields = user_event_get_fields;
1108 	user->class.reg = user_event_reg;
1109 	user->class.probe = user_event_ftrace;
1110 #ifdef CONFIG_PERF_EVENTS
1111 	user->class.perf_probe = user_event_perf;
1112 #endif
1113 
1114 	mutex_lock(&event_mutex);
1115 	ret = user_event_trace_register(user);
1116 	mutex_unlock(&event_mutex);
1117 
1118 	if (ret)
1119 		goto put_user;
1120 
1121 	user->index = index;
1122 	dyn_event_init(&user->devent, &user_event_dops);
1123 	dyn_event_add(&user->devent, &user->call);
1124 	set_bit(user->index, page_bitmap);
1125 	hash_add(register_table, &user->node, key);
1126 
1127 	*newuser = user;
1128 	return 0;
1129 put_user:
1130 	user_event_destroy_fields(user);
1131 	user_event_destroy_validators(user);
1132 	kfree(user);
1133 	return ret;
1134 }
1135 
1136 /*
1137  * Deletes a previously created event if it is no longer being used.
1138  */
1139 static int delete_user_event(char *name)
1140 {
1141 	u32 key;
1142 	int ret;
1143 	struct user_event *user = find_user_event(name, &key);
1144 
1145 	if (!user)
1146 		return -ENOENT;
1147 
1148 	if (atomic_read(&user->refcnt) != 0)
1149 		return -EBUSY;
1150 
1151 	mutex_lock(&event_mutex);
1152 	ret = destroy_user_event(user);
1153 	mutex_unlock(&event_mutex);
1154 
1155 	return ret;
1156 }
1157 
1158 /*
1159  * Validates the user payload and writes via iterator.
1160  */
1161 static ssize_t user_events_write_core(struct file *file, struct iov_iter *i)
1162 {
1163 	struct user_event_refs *refs;
1164 	struct user_event *user = NULL;
1165 	struct tracepoint *tp;
1166 	ssize_t ret = i->count;
1167 	int idx;
1168 
1169 	if (unlikely(copy_from_iter(&idx, sizeof(idx), i) != sizeof(idx)))
1170 		return -EFAULT;
1171 
1172 	rcu_read_lock_sched();
1173 
1174 	refs = rcu_dereference_sched(file->private_data);
1175 
1176 	/*
1177 	 * The refs->events array is protected by RCU, and new items may be
1178 	 * added. But the user retrieved from indexing into the events array
1179 	 * shall be immutable while the file is opened.
1180 	 */
1181 	if (likely(refs && idx < refs->count))
1182 		user = refs->events[idx];
1183 
1184 	rcu_read_unlock_sched();
1185 
1186 	if (unlikely(user == NULL))
1187 		return -ENOENT;
1188 
1189 	if (unlikely(i->count < user->min_size))
1190 		return -EINVAL;
1191 
1192 	tp = &user->tracepoint;
1193 
1194 	/*
1195 	 * It's possible key.enabled disables after this check, however
1196 	 * we don't mind if a few events are included in this condition.
1197 	 */
1198 	if (likely(atomic_read(&tp->key.enabled) > 0)) {
1199 		struct tracepoint_func *probe_func_ptr;
1200 		user_event_func_t probe_func;
1201 		struct iov_iter copy;
1202 		void *tpdata;
1203 		bool faulted;
1204 
1205 		if (unlikely(fault_in_iov_iter_readable(i, i->count)))
1206 			return -EFAULT;
1207 
1208 		faulted = false;
1209 
1210 		rcu_read_lock_sched();
1211 
1212 		probe_func_ptr = rcu_dereference_sched(tp->funcs);
1213 
1214 		if (probe_func_ptr) {
1215 			do {
1216 				copy = *i;
1217 				probe_func = probe_func_ptr->func;
1218 				tpdata = probe_func_ptr->data;
1219 				probe_func(user, &copy, tpdata, &faulted);
1220 			} while ((++probe_func_ptr)->func);
1221 		}
1222 
1223 		rcu_read_unlock_sched();
1224 
1225 		if (unlikely(faulted))
1226 			return -EFAULT;
1227 	}
1228 
1229 	return ret;
1230 }
1231 
1232 static ssize_t user_events_write(struct file *file, const char __user *ubuf,
1233 				 size_t count, loff_t *ppos)
1234 {
1235 	struct iovec iov;
1236 	struct iov_iter i;
1237 
1238 	if (unlikely(*ppos != 0))
1239 		return -EFAULT;
1240 
1241 	if (unlikely(import_single_range(READ, (char *)ubuf, count, &iov, &i)))
1242 		return -EFAULT;
1243 
1244 	return user_events_write_core(file, &i);
1245 }
1246 
1247 static ssize_t user_events_write_iter(struct kiocb *kp, struct iov_iter *i)
1248 {
1249 	return user_events_write_core(kp->ki_filp, i);
1250 }
1251 
1252 static int user_events_ref_add(struct file *file, struct user_event *user)
1253 {
1254 	struct user_event_refs *refs, *new_refs;
1255 	int i, size, count = 0;
1256 
1257 	refs = rcu_dereference_protected(file->private_data,
1258 					 lockdep_is_held(&reg_mutex));
1259 
1260 	if (refs) {
1261 		count = refs->count;
1262 
1263 		for (i = 0; i < count; ++i)
1264 			if (refs->events[i] == user)
1265 				return i;
1266 	}
1267 
1268 	size = struct_size(refs, events, count + 1);
1269 
1270 	new_refs = kzalloc(size, GFP_KERNEL);
1271 
1272 	if (!new_refs)
1273 		return -ENOMEM;
1274 
1275 	new_refs->count = count + 1;
1276 
1277 	for (i = 0; i < count; ++i)
1278 		new_refs->events[i] = refs->events[i];
1279 
1280 	new_refs->events[i] = user;
1281 
1282 	atomic_inc(&user->refcnt);
1283 
1284 	rcu_assign_pointer(file->private_data, new_refs);
1285 
1286 	if (refs)
1287 		kfree_rcu(refs, rcu);
1288 
1289 	return i;
1290 }
1291 
1292 static long user_reg_get(struct user_reg __user *ureg, struct user_reg *kreg)
1293 {
1294 	u32 size;
1295 	long ret;
1296 
1297 	ret = get_user(size, &ureg->size);
1298 
1299 	if (ret)
1300 		return ret;
1301 
1302 	if (size > PAGE_SIZE)
1303 		return -E2BIG;
1304 
1305 	return copy_struct_from_user(kreg, sizeof(*kreg), ureg, size);
1306 }
1307 
1308 /*
1309  * Registers a user_event on behalf of a user process.
1310  */
1311 static long user_events_ioctl_reg(struct file *file, unsigned long uarg)
1312 {
1313 	struct user_reg __user *ureg = (struct user_reg __user *)uarg;
1314 	struct user_reg reg;
1315 	struct user_event *user;
1316 	char *name;
1317 	long ret;
1318 
1319 	ret = user_reg_get(ureg, &reg);
1320 
1321 	if (ret)
1322 		return ret;
1323 
1324 	name = strndup_user((const char __user *)(uintptr_t)reg.name_args,
1325 			    MAX_EVENT_DESC);
1326 
1327 	if (IS_ERR(name)) {
1328 		ret = PTR_ERR(name);
1329 		return ret;
1330 	}
1331 
1332 	ret = user_event_parse_cmd(name, &user);
1333 
1334 	if (ret) {
1335 		kfree(name);
1336 		return ret;
1337 	}
1338 
1339 	ret = user_events_ref_add(file, user);
1340 
1341 	/* Positive number is index and valid */
1342 	if (ret < 0)
1343 		return ret;
1344 
1345 	put_user((u32)ret, &ureg->write_index);
1346 	put_user(user->index, &ureg->status_index);
1347 
1348 	return 0;
1349 }
1350 
1351 /*
1352  * Deletes a user_event on behalf of a user process.
1353  */
1354 static long user_events_ioctl_del(struct file *file, unsigned long uarg)
1355 {
1356 	void __user *ubuf = (void __user *)uarg;
1357 	char *name;
1358 	long ret;
1359 
1360 	name = strndup_user(ubuf, MAX_EVENT_DESC);
1361 
1362 	if (IS_ERR(name))
1363 		return PTR_ERR(name);
1364 
1365 	ret = delete_user_event(name);
1366 
1367 	kfree(name);
1368 
1369 	return ret;
1370 }
1371 
1372 /*
1373  * Handles the ioctl from user mode to register or alter operations.
1374  */
1375 static long user_events_ioctl(struct file *file, unsigned int cmd,
1376 			      unsigned long uarg)
1377 {
1378 	long ret = -ENOTTY;
1379 
1380 	switch (cmd) {
1381 	case DIAG_IOCSREG:
1382 		mutex_lock(&reg_mutex);
1383 		ret = user_events_ioctl_reg(file, uarg);
1384 		mutex_unlock(&reg_mutex);
1385 		break;
1386 
1387 	case DIAG_IOCSDEL:
1388 		mutex_lock(&reg_mutex);
1389 		ret = user_events_ioctl_del(file, uarg);
1390 		mutex_unlock(&reg_mutex);
1391 		break;
1392 	}
1393 
1394 	return ret;
1395 }
1396 
1397 /*
1398  * Handles the final close of the file from user mode.
1399  */
1400 static int user_events_release(struct inode *node, struct file *file)
1401 {
1402 	struct user_event_refs *refs;
1403 	struct user_event *user;
1404 	int i;
1405 
1406 	/*
1407 	 * Ensure refs cannot change under any situation by taking the
1408 	 * register mutex during the final freeing of the references.
1409 	 */
1410 	mutex_lock(&reg_mutex);
1411 
1412 	refs = file->private_data;
1413 
1414 	if (!refs)
1415 		goto out;
1416 
1417 	/*
1418 	 * The lifetime of refs has reached an end, it's tied to this file.
1419 	 * The underlying user_events are ref counted, and cannot be freed.
1420 	 * After this decrement, the user_events may be freed elsewhere.
1421 	 */
1422 	for (i = 0; i < refs->count; ++i) {
1423 		user = refs->events[i];
1424 
1425 		if (user)
1426 			atomic_dec(&user->refcnt);
1427 	}
1428 out:
1429 	file->private_data = NULL;
1430 
1431 	mutex_unlock(&reg_mutex);
1432 
1433 	kfree(refs);
1434 
1435 	return 0;
1436 }
1437 
1438 static const struct file_operations user_data_fops = {
1439 	.write = user_events_write,
1440 	.write_iter = user_events_write_iter,
1441 	.unlocked_ioctl	= user_events_ioctl,
1442 	.release = user_events_release,
1443 };
1444 
1445 /*
1446  * Maps the shared page into the user process for checking if event is enabled.
1447  */
1448 static int user_status_mmap(struct file *file, struct vm_area_struct *vma)
1449 {
1450 	unsigned long size = vma->vm_end - vma->vm_start;
1451 
1452 	if (size != MAX_EVENTS)
1453 		return -EINVAL;
1454 
1455 	return remap_pfn_range(vma, vma->vm_start,
1456 			       virt_to_phys(register_page_data) >> PAGE_SHIFT,
1457 			       size, vm_get_page_prot(VM_READ));
1458 }
1459 
1460 static void *user_seq_start(struct seq_file *m, loff_t *pos)
1461 {
1462 	if (*pos)
1463 		return NULL;
1464 
1465 	return (void *)1;
1466 }
1467 
1468 static void *user_seq_next(struct seq_file *m, void *p, loff_t *pos)
1469 {
1470 	++*pos;
1471 	return NULL;
1472 }
1473 
1474 static void user_seq_stop(struct seq_file *m, void *p)
1475 {
1476 }
1477 
1478 static int user_seq_show(struct seq_file *m, void *p)
1479 {
1480 	struct user_event *user;
1481 	char status;
1482 	int i, active = 0, busy = 0, flags;
1483 
1484 	mutex_lock(&reg_mutex);
1485 
1486 	hash_for_each(register_table, i, user, node) {
1487 		status = register_page_data[user->index];
1488 		flags = user->flags;
1489 
1490 		seq_printf(m, "%d:%s", user->index, EVENT_NAME(user));
1491 
1492 		if (flags != 0 || status != 0)
1493 			seq_puts(m, " #");
1494 
1495 		if (status != 0) {
1496 			seq_puts(m, " Used by");
1497 			if (status & EVENT_STATUS_FTRACE)
1498 				seq_puts(m, " ftrace");
1499 			if (status & EVENT_STATUS_PERF)
1500 				seq_puts(m, " perf");
1501 			if (status & EVENT_STATUS_OTHER)
1502 				seq_puts(m, " other");
1503 			busy++;
1504 		}
1505 
1506 		if (flags & FLAG_BPF_ITER)
1507 			seq_puts(m, " FLAG:BPF_ITER");
1508 
1509 		seq_puts(m, "\n");
1510 		active++;
1511 	}
1512 
1513 	mutex_unlock(&reg_mutex);
1514 
1515 	seq_puts(m, "\n");
1516 	seq_printf(m, "Active: %d\n", active);
1517 	seq_printf(m, "Busy: %d\n", busy);
1518 	seq_printf(m, "Max: %ld\n", MAX_EVENTS);
1519 
1520 	return 0;
1521 }
1522 
1523 static const struct seq_operations user_seq_ops = {
1524 	.start = user_seq_start,
1525 	.next  = user_seq_next,
1526 	.stop  = user_seq_stop,
1527 	.show  = user_seq_show,
1528 };
1529 
1530 static int user_status_open(struct inode *node, struct file *file)
1531 {
1532 	return seq_open(file, &user_seq_ops);
1533 }
1534 
1535 static const struct file_operations user_status_fops = {
1536 	.open = user_status_open,
1537 	.mmap = user_status_mmap,
1538 	.read = seq_read,
1539 	.llseek  = seq_lseek,
1540 	.release = seq_release,
1541 };
1542 
1543 /*
1544  * Creates a set of tracefs files to allow user mode interactions.
1545  */
1546 static int create_user_tracefs(void)
1547 {
1548 	struct dentry *edata, *emmap;
1549 
1550 	edata = tracefs_create_file("user_events_data", TRACE_MODE_WRITE,
1551 				    NULL, NULL, &user_data_fops);
1552 
1553 	if (!edata) {
1554 		pr_warn("Could not create tracefs 'user_events_data' entry\n");
1555 		goto err;
1556 	}
1557 
1558 	/* mmap with MAP_SHARED requires writable fd */
1559 	emmap = tracefs_create_file("user_events_status", TRACE_MODE_WRITE,
1560 				    NULL, NULL, &user_status_fops);
1561 
1562 	if (!emmap) {
1563 		tracefs_remove(edata);
1564 		pr_warn("Could not create tracefs 'user_events_mmap' entry\n");
1565 		goto err;
1566 	}
1567 
1568 	return 0;
1569 err:
1570 	return -ENODEV;
1571 }
1572 
1573 static void set_page_reservations(bool set)
1574 {
1575 	int page;
1576 
1577 	for (page = 0; page < MAX_PAGES; ++page) {
1578 		void *addr = register_page_data + (PAGE_SIZE * page);
1579 
1580 		if (set)
1581 			SetPageReserved(virt_to_page(addr));
1582 		else
1583 			ClearPageReserved(virt_to_page(addr));
1584 	}
1585 }
1586 
1587 static int __init trace_events_user_init(void)
1588 {
1589 	int ret;
1590 
1591 	/* Zero all bits beside 0 (which is reserved for failures) */
1592 	bitmap_zero(page_bitmap, MAX_EVENTS);
1593 	set_bit(0, page_bitmap);
1594 
1595 	register_page_data = kzalloc(MAX_EVENTS, GFP_KERNEL);
1596 
1597 	if (!register_page_data)
1598 		return -ENOMEM;
1599 
1600 	set_page_reservations(true);
1601 
1602 	ret = create_user_tracefs();
1603 
1604 	if (ret) {
1605 		pr_warn("user_events could not register with tracefs\n");
1606 		set_page_reservations(false);
1607 		kfree(register_page_data);
1608 		return ret;
1609 	}
1610 
1611 	if (dyn_event_register(&user_event_dops))
1612 		pr_warn("user_events could not register with dyn_events\n");
1613 
1614 	return 0;
1615 }
1616 
1617 fs_initcall(trace_events_user_init);
1618