xref: /openbmc/linux/kernel/trace/trace_kprobe.c (revision d4fd6347)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Kprobes-based tracing events
4  *
5  * Created by Masami Hiramatsu <mhiramat@redhat.com>
6  *
7  */
8 #define pr_fmt(fmt)	"trace_kprobe: " fmt
9 
10 #include <linux/module.h>
11 #include <linux/uaccess.h>
12 #include <linux/rculist.h>
13 #include <linux/error-injection.h>
14 
15 #include "trace_dynevent.h"
16 #include "trace_kprobe_selftest.h"
17 #include "trace_probe.h"
18 #include "trace_probe_tmpl.h"
19 
20 #define KPROBE_EVENT_SYSTEM "kprobes"
21 #define KRETPROBE_MAXACTIVE_MAX 4096
22 
23 static int trace_kprobe_create(int argc, const char **argv);
24 static int trace_kprobe_show(struct seq_file *m, struct dyn_event *ev);
25 static int trace_kprobe_release(struct dyn_event *ev);
26 static bool trace_kprobe_is_busy(struct dyn_event *ev);
27 static bool trace_kprobe_match(const char *system, const char *event,
28 			       struct dyn_event *ev);
29 
30 static struct dyn_event_operations trace_kprobe_ops = {
31 	.create = trace_kprobe_create,
32 	.show = trace_kprobe_show,
33 	.is_busy = trace_kprobe_is_busy,
34 	.free = trace_kprobe_release,
35 	.match = trace_kprobe_match,
36 };
37 
38 /*
39  * Kprobe event core functions
40  */
41 struct trace_kprobe {
42 	struct dyn_event	devent;
43 	struct kretprobe	rp;	/* Use rp.kp for kprobe use */
44 	unsigned long __percpu *nhit;
45 	const char		*symbol;	/* symbol name */
46 	struct trace_probe	tp;
47 };
48 
49 static bool is_trace_kprobe(struct dyn_event *ev)
50 {
51 	return ev->ops == &trace_kprobe_ops;
52 }
53 
54 static struct trace_kprobe *to_trace_kprobe(struct dyn_event *ev)
55 {
56 	return container_of(ev, struct trace_kprobe, devent);
57 }
58 
59 /**
60  * for_each_trace_kprobe - iterate over the trace_kprobe list
61  * @pos:	the struct trace_kprobe * for each entry
62  * @dpos:	the struct dyn_event * to use as a loop cursor
63  */
64 #define for_each_trace_kprobe(pos, dpos)	\
65 	for_each_dyn_event(dpos)		\
66 		if (is_trace_kprobe(dpos) && (pos = to_trace_kprobe(dpos)))
67 
68 #define SIZEOF_TRACE_KPROBE(n)				\
69 	(offsetof(struct trace_kprobe, tp.args) +	\
70 	(sizeof(struct probe_arg) * (n)))
71 
72 static nokprobe_inline bool trace_kprobe_is_return(struct trace_kprobe *tk)
73 {
74 	return tk->rp.handler != NULL;
75 }
76 
77 static nokprobe_inline const char *trace_kprobe_symbol(struct trace_kprobe *tk)
78 {
79 	return tk->symbol ? tk->symbol : "unknown";
80 }
81 
82 static nokprobe_inline unsigned long trace_kprobe_offset(struct trace_kprobe *tk)
83 {
84 	return tk->rp.kp.offset;
85 }
86 
87 static nokprobe_inline bool trace_kprobe_has_gone(struct trace_kprobe *tk)
88 {
89 	return !!(kprobe_gone(&tk->rp.kp));
90 }
91 
92 static nokprobe_inline bool trace_kprobe_within_module(struct trace_kprobe *tk,
93 						 struct module *mod)
94 {
95 	int len = strlen(mod->name);
96 	const char *name = trace_kprobe_symbol(tk);
97 	return strncmp(mod->name, name, len) == 0 && name[len] == ':';
98 }
99 
100 static nokprobe_inline bool trace_kprobe_module_exist(struct trace_kprobe *tk)
101 {
102 	char *p;
103 	bool ret;
104 
105 	if (!tk->symbol)
106 		return false;
107 	p = strchr(tk->symbol, ':');
108 	if (!p)
109 		return true;
110 	*p = '\0';
111 	mutex_lock(&module_mutex);
112 	ret = !!find_module(tk->symbol);
113 	mutex_unlock(&module_mutex);
114 	*p = ':';
115 
116 	return ret;
117 }
118 
119 static bool trace_kprobe_is_busy(struct dyn_event *ev)
120 {
121 	struct trace_kprobe *tk = to_trace_kprobe(ev);
122 
123 	return trace_probe_is_enabled(&tk->tp);
124 }
125 
126 static bool trace_kprobe_match(const char *system, const char *event,
127 			       struct dyn_event *ev)
128 {
129 	struct trace_kprobe *tk = to_trace_kprobe(ev);
130 
131 	return strcmp(trace_event_name(&tk->tp.call), event) == 0 &&
132 	    (!system || strcmp(tk->tp.call.class->system, system) == 0);
133 }
134 
135 static nokprobe_inline unsigned long trace_kprobe_nhit(struct trace_kprobe *tk)
136 {
137 	unsigned long nhit = 0;
138 	int cpu;
139 
140 	for_each_possible_cpu(cpu)
141 		nhit += *per_cpu_ptr(tk->nhit, cpu);
142 
143 	return nhit;
144 }
145 
146 /* Return 0 if it fails to find the symbol address */
147 static nokprobe_inline
148 unsigned long trace_kprobe_address(struct trace_kprobe *tk)
149 {
150 	unsigned long addr;
151 
152 	if (tk->symbol) {
153 		addr = (unsigned long)
154 			kallsyms_lookup_name(trace_kprobe_symbol(tk));
155 		if (addr)
156 			addr += tk->rp.kp.offset;
157 	} else {
158 		addr = (unsigned long)tk->rp.kp.addr;
159 	}
160 	return addr;
161 }
162 
163 bool trace_kprobe_on_func_entry(struct trace_event_call *call)
164 {
165 	struct trace_kprobe *tk = (struct trace_kprobe *)call->data;
166 
167 	return kprobe_on_func_entry(tk->rp.kp.addr,
168 			tk->rp.kp.addr ? NULL : tk->rp.kp.symbol_name,
169 			tk->rp.kp.addr ? 0 : tk->rp.kp.offset);
170 }
171 
172 bool trace_kprobe_error_injectable(struct trace_event_call *call)
173 {
174 	struct trace_kprobe *tk = (struct trace_kprobe *)call->data;
175 
176 	return within_error_injection_list(trace_kprobe_address(tk));
177 }
178 
179 static int register_kprobe_event(struct trace_kprobe *tk);
180 static int unregister_kprobe_event(struct trace_kprobe *tk);
181 
182 static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs);
183 static int kretprobe_dispatcher(struct kretprobe_instance *ri,
184 				struct pt_regs *regs);
185 
186 /*
187  * Allocate new trace_probe and initialize it (including kprobes).
188  */
189 static struct trace_kprobe *alloc_trace_kprobe(const char *group,
190 					     const char *event,
191 					     void *addr,
192 					     const char *symbol,
193 					     unsigned long offs,
194 					     int maxactive,
195 					     int nargs, bool is_return)
196 {
197 	struct trace_kprobe *tk;
198 	int ret = -ENOMEM;
199 
200 	tk = kzalloc(SIZEOF_TRACE_KPROBE(nargs), GFP_KERNEL);
201 	if (!tk)
202 		return ERR_PTR(ret);
203 
204 	tk->nhit = alloc_percpu(unsigned long);
205 	if (!tk->nhit)
206 		goto error;
207 
208 	if (symbol) {
209 		tk->symbol = kstrdup(symbol, GFP_KERNEL);
210 		if (!tk->symbol)
211 			goto error;
212 		tk->rp.kp.symbol_name = tk->symbol;
213 		tk->rp.kp.offset = offs;
214 	} else
215 		tk->rp.kp.addr = addr;
216 
217 	if (is_return)
218 		tk->rp.handler = kretprobe_dispatcher;
219 	else
220 		tk->rp.kp.pre_handler = kprobe_dispatcher;
221 
222 	tk->rp.maxactive = maxactive;
223 
224 	if (!event || !group) {
225 		ret = -EINVAL;
226 		goto error;
227 	}
228 
229 	tk->tp.call.class = &tk->tp.class;
230 	tk->tp.call.name = kstrdup(event, GFP_KERNEL);
231 	if (!tk->tp.call.name)
232 		goto error;
233 
234 	tk->tp.class.system = kstrdup(group, GFP_KERNEL);
235 	if (!tk->tp.class.system)
236 		goto error;
237 
238 	dyn_event_init(&tk->devent, &trace_kprobe_ops);
239 	INIT_LIST_HEAD(&tk->tp.files);
240 	return tk;
241 error:
242 	kfree(tk->tp.call.name);
243 	kfree(tk->symbol);
244 	free_percpu(tk->nhit);
245 	kfree(tk);
246 	return ERR_PTR(ret);
247 }
248 
249 static void free_trace_kprobe(struct trace_kprobe *tk)
250 {
251 	int i;
252 
253 	if (!tk)
254 		return;
255 
256 	for (i = 0; i < tk->tp.nr_args; i++)
257 		traceprobe_free_probe_arg(&tk->tp.args[i]);
258 
259 	kfree(tk->tp.call.class->system);
260 	kfree(tk->tp.call.name);
261 	kfree(tk->symbol);
262 	free_percpu(tk->nhit);
263 	kfree(tk);
264 }
265 
266 static struct trace_kprobe *find_trace_kprobe(const char *event,
267 					      const char *group)
268 {
269 	struct dyn_event *pos;
270 	struct trace_kprobe *tk;
271 
272 	for_each_trace_kprobe(tk, pos)
273 		if (strcmp(trace_event_name(&tk->tp.call), event) == 0 &&
274 		    strcmp(tk->tp.call.class->system, group) == 0)
275 			return tk;
276 	return NULL;
277 }
278 
279 static inline int __enable_trace_kprobe(struct trace_kprobe *tk)
280 {
281 	int ret = 0;
282 
283 	if (trace_probe_is_registered(&tk->tp) && !trace_kprobe_has_gone(tk)) {
284 		if (trace_kprobe_is_return(tk))
285 			ret = enable_kretprobe(&tk->rp);
286 		else
287 			ret = enable_kprobe(&tk->rp.kp);
288 	}
289 
290 	return ret;
291 }
292 
293 /*
294  * Enable trace_probe
295  * if the file is NULL, enable "perf" handler, or enable "trace" handler.
296  */
297 static int
298 enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
299 {
300 	struct event_file_link *link;
301 	int ret = 0;
302 
303 	if (file) {
304 		link = kmalloc(sizeof(*link), GFP_KERNEL);
305 		if (!link) {
306 			ret = -ENOMEM;
307 			goto out;
308 		}
309 
310 		link->file = file;
311 		list_add_tail_rcu(&link->list, &tk->tp.files);
312 
313 		tk->tp.flags |= TP_FLAG_TRACE;
314 		ret = __enable_trace_kprobe(tk);
315 		if (ret) {
316 			list_del_rcu(&link->list);
317 			kfree(link);
318 			tk->tp.flags &= ~TP_FLAG_TRACE;
319 		}
320 
321 	} else {
322 		tk->tp.flags |= TP_FLAG_PROFILE;
323 		ret = __enable_trace_kprobe(tk);
324 		if (ret)
325 			tk->tp.flags &= ~TP_FLAG_PROFILE;
326 	}
327  out:
328 	return ret;
329 }
330 
331 /*
332  * Disable trace_probe
333  * if the file is NULL, disable "perf" handler, or disable "trace" handler.
334  */
335 static int
336 disable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
337 {
338 	struct event_file_link *link = NULL;
339 	int wait = 0;
340 	int ret = 0;
341 
342 	if (file) {
343 		link = find_event_file_link(&tk->tp, file);
344 		if (!link) {
345 			ret = -EINVAL;
346 			goto out;
347 		}
348 
349 		list_del_rcu(&link->list);
350 		wait = 1;
351 		if (!list_empty(&tk->tp.files))
352 			goto out;
353 
354 		tk->tp.flags &= ~TP_FLAG_TRACE;
355 	} else
356 		tk->tp.flags &= ~TP_FLAG_PROFILE;
357 
358 	if (!trace_probe_is_enabled(&tk->tp) && trace_probe_is_registered(&tk->tp)) {
359 		if (trace_kprobe_is_return(tk))
360 			disable_kretprobe(&tk->rp);
361 		else
362 			disable_kprobe(&tk->rp.kp);
363 		wait = 1;
364 	}
365 
366 	/*
367 	 * if tk is not added to any list, it must be a local trace_kprobe
368 	 * created with perf_event_open. We don't need to wait for these
369 	 * trace_kprobes
370 	 */
371 	if (list_empty(&tk->devent.list))
372 		wait = 0;
373  out:
374 	if (wait) {
375 		/*
376 		 * Synchronize with kprobe_trace_func/kretprobe_trace_func
377 		 * to ensure disabled (all running handlers are finished).
378 		 * This is not only for kfree(), but also the caller,
379 		 * trace_remove_event_call() supposes it for releasing
380 		 * event_call related objects, which will be accessed in
381 		 * the kprobe_trace_func/kretprobe_trace_func.
382 		 */
383 		synchronize_rcu();
384 		kfree(link);	/* Ignored if link == NULL */
385 	}
386 
387 	return ret;
388 }
389 
390 #if defined(CONFIG_KPROBES_ON_FTRACE) && \
391 	!defined(CONFIG_KPROBE_EVENTS_ON_NOTRACE)
392 static bool within_notrace_func(struct trace_kprobe *tk)
393 {
394 	unsigned long offset, size, addr;
395 
396 	addr = trace_kprobe_address(tk);
397 	if (!addr || !kallsyms_lookup_size_offset(addr, &size, &offset))
398 		return false;
399 
400 	/* Get the entry address of the target function */
401 	addr -= offset;
402 
403 	/*
404 	 * Since ftrace_location_range() does inclusive range check, we need
405 	 * to subtract 1 byte from the end address.
406 	 */
407 	return !ftrace_location_range(addr, addr + size - 1);
408 }
409 #else
410 #define within_notrace_func(tk)	(false)
411 #endif
412 
413 /* Internal register function - just handle k*probes and flags */
414 static int __register_trace_kprobe(struct trace_kprobe *tk)
415 {
416 	int i, ret;
417 
418 	if (trace_probe_is_registered(&tk->tp))
419 		return -EINVAL;
420 
421 	if (within_notrace_func(tk)) {
422 		pr_warn("Could not probe notrace function %s\n",
423 			trace_kprobe_symbol(tk));
424 		return -EINVAL;
425 	}
426 
427 	for (i = 0; i < tk->tp.nr_args; i++) {
428 		ret = traceprobe_update_arg(&tk->tp.args[i]);
429 		if (ret)
430 			return ret;
431 	}
432 
433 	/* Set/clear disabled flag according to tp->flag */
434 	if (trace_probe_is_enabled(&tk->tp))
435 		tk->rp.kp.flags &= ~KPROBE_FLAG_DISABLED;
436 	else
437 		tk->rp.kp.flags |= KPROBE_FLAG_DISABLED;
438 
439 	if (trace_kprobe_is_return(tk))
440 		ret = register_kretprobe(&tk->rp);
441 	else
442 		ret = register_kprobe(&tk->rp.kp);
443 
444 	if (ret == 0)
445 		tk->tp.flags |= TP_FLAG_REGISTERED;
446 	return ret;
447 }
448 
449 /* Internal unregister function - just handle k*probes and flags */
450 static void __unregister_trace_kprobe(struct trace_kprobe *tk)
451 {
452 	if (trace_probe_is_registered(&tk->tp)) {
453 		if (trace_kprobe_is_return(tk))
454 			unregister_kretprobe(&tk->rp);
455 		else
456 			unregister_kprobe(&tk->rp.kp);
457 		tk->tp.flags &= ~TP_FLAG_REGISTERED;
458 		/* Cleanup kprobe for reuse */
459 		if (tk->rp.kp.symbol_name)
460 			tk->rp.kp.addr = NULL;
461 	}
462 }
463 
464 /* Unregister a trace_probe and probe_event */
465 static int unregister_trace_kprobe(struct trace_kprobe *tk)
466 {
467 	/* Enabled event can not be unregistered */
468 	if (trace_probe_is_enabled(&tk->tp))
469 		return -EBUSY;
470 
471 	/* Will fail if probe is being used by ftrace or perf */
472 	if (unregister_kprobe_event(tk))
473 		return -EBUSY;
474 
475 	__unregister_trace_kprobe(tk);
476 	dyn_event_remove(&tk->devent);
477 
478 	return 0;
479 }
480 
481 /* Register a trace_probe and probe_event */
482 static int register_trace_kprobe(struct trace_kprobe *tk)
483 {
484 	struct trace_kprobe *old_tk;
485 	int ret;
486 
487 	mutex_lock(&event_mutex);
488 
489 	/* Delete old (same name) event if exist */
490 	old_tk = find_trace_kprobe(trace_event_name(&tk->tp.call),
491 			tk->tp.call.class->system);
492 	if (old_tk) {
493 		ret = unregister_trace_kprobe(old_tk);
494 		if (ret < 0)
495 			goto end;
496 		free_trace_kprobe(old_tk);
497 	}
498 
499 	/* Register new event */
500 	ret = register_kprobe_event(tk);
501 	if (ret) {
502 		pr_warn("Failed to register probe event(%d)\n", ret);
503 		goto end;
504 	}
505 
506 	/* Register k*probe */
507 	ret = __register_trace_kprobe(tk);
508 	if (ret == -ENOENT && !trace_kprobe_module_exist(tk)) {
509 		pr_warn("This probe might be able to register after target module is loaded. Continue.\n");
510 		ret = 0;
511 	}
512 
513 	if (ret < 0)
514 		unregister_kprobe_event(tk);
515 	else
516 		dyn_event_add(&tk->devent);
517 
518 end:
519 	mutex_unlock(&event_mutex);
520 	return ret;
521 }
522 
523 /* Module notifier call back, checking event on the module */
524 static int trace_kprobe_module_callback(struct notifier_block *nb,
525 				       unsigned long val, void *data)
526 {
527 	struct module *mod = data;
528 	struct dyn_event *pos;
529 	struct trace_kprobe *tk;
530 	int ret;
531 
532 	if (val != MODULE_STATE_COMING)
533 		return NOTIFY_DONE;
534 
535 	/* Update probes on coming module */
536 	mutex_lock(&event_mutex);
537 	for_each_trace_kprobe(tk, pos) {
538 		if (trace_kprobe_within_module(tk, mod)) {
539 			/* Don't need to check busy - this should have gone. */
540 			__unregister_trace_kprobe(tk);
541 			ret = __register_trace_kprobe(tk);
542 			if (ret)
543 				pr_warn("Failed to re-register probe %s on %s: %d\n",
544 					trace_event_name(&tk->tp.call),
545 					mod->name, ret);
546 		}
547 	}
548 	mutex_unlock(&event_mutex);
549 
550 	return NOTIFY_DONE;
551 }
552 
553 static struct notifier_block trace_kprobe_module_nb = {
554 	.notifier_call = trace_kprobe_module_callback,
555 	.priority = 1	/* Invoked after kprobe module callback */
556 };
557 
558 /* Convert certain expected symbols into '_' when generating event names */
559 static inline void sanitize_event_name(char *name)
560 {
561 	while (*name++ != '\0')
562 		if (*name == ':' || *name == '.')
563 			*name = '_';
564 }
565 
566 static int trace_kprobe_create(int argc, const char *argv[])
567 {
568 	/*
569 	 * Argument syntax:
570 	 *  - Add kprobe:
571 	 *      p[:[GRP/]EVENT] [MOD:]KSYM[+OFFS]|KADDR [FETCHARGS]
572 	 *  - Add kretprobe:
573 	 *      r[MAXACTIVE][:[GRP/]EVENT] [MOD:]KSYM[+0] [FETCHARGS]
574 	 * Fetch args:
575 	 *  $retval	: fetch return value
576 	 *  $stack	: fetch stack address
577 	 *  $stackN	: fetch Nth of stack (N:0-)
578 	 *  $comm       : fetch current task comm
579 	 *  @ADDR	: fetch memory at ADDR (ADDR should be in kernel)
580 	 *  @SYM[+|-offs] : fetch memory at SYM +|- offs (SYM is a data symbol)
581 	 *  %REG	: fetch register REG
582 	 * Dereferencing memory fetch:
583 	 *  +|-offs(ARG) : fetch memory at ARG +|- offs address.
584 	 * Alias name of args:
585 	 *  NAME=FETCHARG : set NAME as alias of FETCHARG.
586 	 * Type of args:
587 	 *  FETCHARG:TYPE : use TYPE instead of unsigned long.
588 	 */
589 	struct trace_kprobe *tk = NULL;
590 	int i, len, ret = 0;
591 	bool is_return = false;
592 	char *symbol = NULL, *tmp = NULL;
593 	const char *event = NULL, *group = KPROBE_EVENT_SYSTEM;
594 	int maxactive = 0;
595 	long offset = 0;
596 	void *addr = NULL;
597 	char buf[MAX_EVENT_NAME_LEN];
598 	unsigned int flags = TPARG_FL_KERNEL;
599 
600 	switch (argv[0][0]) {
601 	case 'r':
602 		is_return = true;
603 		flags |= TPARG_FL_RETURN;
604 		break;
605 	case 'p':
606 		break;
607 	default:
608 		return -ECANCELED;
609 	}
610 	if (argc < 2)
611 		return -ECANCELED;
612 
613 	trace_probe_log_init("trace_kprobe", argc, argv);
614 
615 	event = strchr(&argv[0][1], ':');
616 	if (event)
617 		event++;
618 
619 	if (isdigit(argv[0][1])) {
620 		if (!is_return) {
621 			trace_probe_log_err(1, MAXACT_NO_KPROBE);
622 			goto parse_error;
623 		}
624 		if (event)
625 			len = event - &argv[0][1] - 1;
626 		else
627 			len = strlen(&argv[0][1]);
628 		if (len > MAX_EVENT_NAME_LEN - 1) {
629 			trace_probe_log_err(1, BAD_MAXACT);
630 			goto parse_error;
631 		}
632 		memcpy(buf, &argv[0][1], len);
633 		buf[len] = '\0';
634 		ret = kstrtouint(buf, 0, &maxactive);
635 		if (ret || !maxactive) {
636 			trace_probe_log_err(1, BAD_MAXACT);
637 			goto parse_error;
638 		}
639 		/* kretprobes instances are iterated over via a list. The
640 		 * maximum should stay reasonable.
641 		 */
642 		if (maxactive > KRETPROBE_MAXACTIVE_MAX) {
643 			trace_probe_log_err(1, MAXACT_TOO_BIG);
644 			goto parse_error;
645 		}
646 	}
647 
648 	/* try to parse an address. if that fails, try to read the
649 	 * input as a symbol. */
650 	if (kstrtoul(argv[1], 0, (unsigned long *)&addr)) {
651 		trace_probe_log_set_index(1);
652 		/* Check whether uprobe event specified */
653 		if (strchr(argv[1], '/') && strchr(argv[1], ':')) {
654 			ret = -ECANCELED;
655 			goto error;
656 		}
657 		/* a symbol specified */
658 		symbol = kstrdup(argv[1], GFP_KERNEL);
659 		if (!symbol)
660 			return -ENOMEM;
661 		/* TODO: support .init module functions */
662 		ret = traceprobe_split_symbol_offset(symbol, &offset);
663 		if (ret || offset < 0 || offset > UINT_MAX) {
664 			trace_probe_log_err(0, BAD_PROBE_ADDR);
665 			goto parse_error;
666 		}
667 		if (kprobe_on_func_entry(NULL, symbol, offset))
668 			flags |= TPARG_FL_FENTRY;
669 		if (offset && is_return && !(flags & TPARG_FL_FENTRY)) {
670 			trace_probe_log_err(0, BAD_RETPROBE);
671 			goto parse_error;
672 		}
673 	}
674 
675 	trace_probe_log_set_index(0);
676 	if (event) {
677 		ret = traceprobe_parse_event_name(&event, &group, buf,
678 						  event - argv[0]);
679 		if (ret)
680 			goto parse_error;
681 	} else {
682 		/* Make a new event name */
683 		if (symbol)
684 			snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_%ld",
685 				 is_return ? 'r' : 'p', symbol, offset);
686 		else
687 			snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p",
688 				 is_return ? 'r' : 'p', addr);
689 		sanitize_event_name(buf);
690 		event = buf;
691 	}
692 
693 	/* setup a probe */
694 	tk = alloc_trace_kprobe(group, event, addr, symbol, offset, maxactive,
695 			       argc - 2, is_return);
696 	if (IS_ERR(tk)) {
697 		ret = PTR_ERR(tk);
698 		/* This must return -ENOMEM, else there is a bug */
699 		WARN_ON_ONCE(ret != -ENOMEM);
700 		goto out;	/* We know tk is not allocated */
701 	}
702 	argc -= 2; argv += 2;
703 
704 	/* parse arguments */
705 	for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) {
706 		tmp = kstrdup(argv[i], GFP_KERNEL);
707 		if (!tmp) {
708 			ret = -ENOMEM;
709 			goto error;
710 		}
711 
712 		trace_probe_log_set_index(i + 2);
713 		ret = traceprobe_parse_probe_arg(&tk->tp, i, tmp, flags);
714 		kfree(tmp);
715 		if (ret)
716 			goto error;	/* This can be -ENOMEM */
717 	}
718 
719 	ret = register_trace_kprobe(tk);
720 	if (ret) {
721 		trace_probe_log_set_index(1);
722 		if (ret == -EILSEQ)
723 			trace_probe_log_err(0, BAD_INSN_BNDRY);
724 		else if (ret == -ENOENT)
725 			trace_probe_log_err(0, BAD_PROBE_ADDR);
726 		else if (ret != -ENOMEM)
727 			trace_probe_log_err(0, FAIL_REG_PROBE);
728 		goto error;
729 	}
730 
731 out:
732 	trace_probe_log_clear();
733 	kfree(symbol);
734 	return ret;
735 
736 parse_error:
737 	ret = -EINVAL;
738 error:
739 	free_trace_kprobe(tk);
740 	goto out;
741 }
742 
743 static int create_or_delete_trace_kprobe(int argc, char **argv)
744 {
745 	int ret;
746 
747 	if (argv[0][0] == '-')
748 		return dyn_event_release(argc, argv, &trace_kprobe_ops);
749 
750 	ret = trace_kprobe_create(argc, (const char **)argv);
751 	return ret == -ECANCELED ? -EINVAL : ret;
752 }
753 
754 static int trace_kprobe_release(struct dyn_event *ev)
755 {
756 	struct trace_kprobe *tk = to_trace_kprobe(ev);
757 	int ret = unregister_trace_kprobe(tk);
758 
759 	if (!ret)
760 		free_trace_kprobe(tk);
761 	return ret;
762 }
763 
764 static int trace_kprobe_show(struct seq_file *m, struct dyn_event *ev)
765 {
766 	struct trace_kprobe *tk = to_trace_kprobe(ev);
767 	int i;
768 
769 	seq_putc(m, trace_kprobe_is_return(tk) ? 'r' : 'p');
770 	seq_printf(m, ":%s/%s", tk->tp.call.class->system,
771 			trace_event_name(&tk->tp.call));
772 
773 	if (!tk->symbol)
774 		seq_printf(m, " 0x%p", tk->rp.kp.addr);
775 	else if (tk->rp.kp.offset)
776 		seq_printf(m, " %s+%u", trace_kprobe_symbol(tk),
777 			   tk->rp.kp.offset);
778 	else
779 		seq_printf(m, " %s", trace_kprobe_symbol(tk));
780 
781 	for (i = 0; i < tk->tp.nr_args; i++)
782 		seq_printf(m, " %s=%s", tk->tp.args[i].name, tk->tp.args[i].comm);
783 	seq_putc(m, '\n');
784 
785 	return 0;
786 }
787 
788 static int probes_seq_show(struct seq_file *m, void *v)
789 {
790 	struct dyn_event *ev = v;
791 
792 	if (!is_trace_kprobe(ev))
793 		return 0;
794 
795 	return trace_kprobe_show(m, ev);
796 }
797 
798 static const struct seq_operations probes_seq_op = {
799 	.start  = dyn_event_seq_start,
800 	.next   = dyn_event_seq_next,
801 	.stop   = dyn_event_seq_stop,
802 	.show   = probes_seq_show
803 };
804 
805 static int probes_open(struct inode *inode, struct file *file)
806 {
807 	int ret;
808 
809 	if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
810 		ret = dyn_events_release_all(&trace_kprobe_ops);
811 		if (ret < 0)
812 			return ret;
813 	}
814 
815 	return seq_open(file, &probes_seq_op);
816 }
817 
818 static ssize_t probes_write(struct file *file, const char __user *buffer,
819 			    size_t count, loff_t *ppos)
820 {
821 	return trace_parse_run_command(file, buffer, count, ppos,
822 				       create_or_delete_trace_kprobe);
823 }
824 
825 static const struct file_operations kprobe_events_ops = {
826 	.owner          = THIS_MODULE,
827 	.open           = probes_open,
828 	.read           = seq_read,
829 	.llseek         = seq_lseek,
830 	.release        = seq_release,
831 	.write		= probes_write,
832 };
833 
834 /* Probes profiling interfaces */
835 static int probes_profile_seq_show(struct seq_file *m, void *v)
836 {
837 	struct dyn_event *ev = v;
838 	struct trace_kprobe *tk;
839 
840 	if (!is_trace_kprobe(ev))
841 		return 0;
842 
843 	tk = to_trace_kprobe(ev);
844 	seq_printf(m, "  %-44s %15lu %15lu\n",
845 		   trace_event_name(&tk->tp.call),
846 		   trace_kprobe_nhit(tk),
847 		   tk->rp.kp.nmissed);
848 
849 	return 0;
850 }
851 
852 static const struct seq_operations profile_seq_op = {
853 	.start  = dyn_event_seq_start,
854 	.next   = dyn_event_seq_next,
855 	.stop   = dyn_event_seq_stop,
856 	.show   = probes_profile_seq_show
857 };
858 
859 static int profile_open(struct inode *inode, struct file *file)
860 {
861 	return seq_open(file, &profile_seq_op);
862 }
863 
864 static const struct file_operations kprobe_profile_ops = {
865 	.owner          = THIS_MODULE,
866 	.open           = profile_open,
867 	.read           = seq_read,
868 	.llseek         = seq_lseek,
869 	.release        = seq_release,
870 };
871 
872 /* Kprobe specific fetch functions */
873 
874 /* Return the length of string -- including null terminal byte */
875 static nokprobe_inline int
876 fetch_store_strlen(unsigned long addr)
877 {
878 	int ret, len = 0;
879 	u8 c;
880 
881 	do {
882 		ret = probe_kernel_read(&c, (u8 *)addr + len, 1);
883 		len++;
884 	} while (c && ret == 0 && len < MAX_STRING_SIZE);
885 
886 	return (ret < 0) ? ret : len;
887 }
888 
889 /*
890  * Fetch a null-terminated string. Caller MUST set *(u32 *)buf with max
891  * length and relative data location.
892  */
893 static nokprobe_inline int
894 fetch_store_string(unsigned long addr, void *dest, void *base)
895 {
896 	int maxlen = get_loc_len(*(u32 *)dest);
897 	u8 *dst = get_loc_data(dest, base);
898 	long ret;
899 
900 	if (unlikely(!maxlen))
901 		return -ENOMEM;
902 	/*
903 	 * Try to get string again, since the string can be changed while
904 	 * probing.
905 	 */
906 	ret = strncpy_from_unsafe(dst, (void *)addr, maxlen);
907 
908 	if (ret >= 0)
909 		*(u32 *)dest = make_data_loc(ret, (void *)dst - base);
910 	return ret;
911 }
912 
913 static nokprobe_inline int
914 probe_mem_read(void *dest, void *src, size_t size)
915 {
916 	return probe_kernel_read(dest, src, size);
917 }
918 
919 /* Note that we don't verify it, since the code does not come from user space */
920 static int
921 process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, void *dest,
922 		   void *base)
923 {
924 	unsigned long val;
925 
926 retry:
927 	/* 1st stage: get value from context */
928 	switch (code->op) {
929 	case FETCH_OP_REG:
930 		val = regs_get_register(regs, code->param);
931 		break;
932 	case FETCH_OP_STACK:
933 		val = regs_get_kernel_stack_nth(regs, code->param);
934 		break;
935 	case FETCH_OP_STACKP:
936 		val = kernel_stack_pointer(regs);
937 		break;
938 	case FETCH_OP_RETVAL:
939 		val = regs_return_value(regs);
940 		break;
941 	case FETCH_OP_IMM:
942 		val = code->immediate;
943 		break;
944 	case FETCH_OP_COMM:
945 		val = (unsigned long)current->comm;
946 		break;
947 #ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
948 	case FETCH_OP_ARG:
949 		val = regs_get_kernel_argument(regs, code->param);
950 		break;
951 #endif
952 	case FETCH_NOP_SYMBOL:	/* Ignore a place holder */
953 		code++;
954 		goto retry;
955 	default:
956 		return -EILSEQ;
957 	}
958 	code++;
959 
960 	return process_fetch_insn_bottom(code, val, dest, base);
961 }
962 NOKPROBE_SYMBOL(process_fetch_insn)
963 
964 /* Kprobe handler */
965 static nokprobe_inline void
966 __kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs,
967 		    struct trace_event_file *trace_file)
968 {
969 	struct kprobe_trace_entry_head *entry;
970 	struct ring_buffer_event *event;
971 	struct ring_buffer *buffer;
972 	int size, dsize, pc;
973 	unsigned long irq_flags;
974 	struct trace_event_call *call = &tk->tp.call;
975 
976 	WARN_ON(call != trace_file->event_call);
977 
978 	if (trace_trigger_soft_disabled(trace_file))
979 		return;
980 
981 	local_save_flags(irq_flags);
982 	pc = preempt_count();
983 
984 	dsize = __get_data_size(&tk->tp, regs);
985 	size = sizeof(*entry) + tk->tp.size + dsize;
986 
987 	event = trace_event_buffer_lock_reserve(&buffer, trace_file,
988 						call->event.type,
989 						size, irq_flags, pc);
990 	if (!event)
991 		return;
992 
993 	entry = ring_buffer_event_data(event);
994 	entry->ip = (unsigned long)tk->rp.kp.addr;
995 	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
996 
997 	event_trigger_unlock_commit_regs(trace_file, buffer, event,
998 					 entry, irq_flags, pc, regs);
999 }
1000 
1001 static void
1002 kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs)
1003 {
1004 	struct event_file_link *link;
1005 
1006 	list_for_each_entry_rcu(link, &tk->tp.files, list)
1007 		__kprobe_trace_func(tk, regs, link->file);
1008 }
1009 NOKPROBE_SYMBOL(kprobe_trace_func);
1010 
1011 /* Kretprobe handler */
1012 static nokprobe_inline void
1013 __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
1014 		       struct pt_regs *regs,
1015 		       struct trace_event_file *trace_file)
1016 {
1017 	struct kretprobe_trace_entry_head *entry;
1018 	struct ring_buffer_event *event;
1019 	struct ring_buffer *buffer;
1020 	int size, pc, dsize;
1021 	unsigned long irq_flags;
1022 	struct trace_event_call *call = &tk->tp.call;
1023 
1024 	WARN_ON(call != trace_file->event_call);
1025 
1026 	if (trace_trigger_soft_disabled(trace_file))
1027 		return;
1028 
1029 	local_save_flags(irq_flags);
1030 	pc = preempt_count();
1031 
1032 	dsize = __get_data_size(&tk->tp, regs);
1033 	size = sizeof(*entry) + tk->tp.size + dsize;
1034 
1035 	event = trace_event_buffer_lock_reserve(&buffer, trace_file,
1036 						call->event.type,
1037 						size, irq_flags, pc);
1038 	if (!event)
1039 		return;
1040 
1041 	entry = ring_buffer_event_data(event);
1042 	entry->func = (unsigned long)tk->rp.kp.addr;
1043 	entry->ret_ip = (unsigned long)ri->ret_addr;
1044 	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
1045 
1046 	event_trigger_unlock_commit_regs(trace_file, buffer, event,
1047 					 entry, irq_flags, pc, regs);
1048 }
1049 
1050 static void
1051 kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
1052 		     struct pt_regs *regs)
1053 {
1054 	struct event_file_link *link;
1055 
1056 	list_for_each_entry_rcu(link, &tk->tp.files, list)
1057 		__kretprobe_trace_func(tk, ri, regs, link->file);
1058 }
1059 NOKPROBE_SYMBOL(kretprobe_trace_func);
1060 
1061 /* Event entry printers */
1062 static enum print_line_t
1063 print_kprobe_event(struct trace_iterator *iter, int flags,
1064 		   struct trace_event *event)
1065 {
1066 	struct kprobe_trace_entry_head *field;
1067 	struct trace_seq *s = &iter->seq;
1068 	struct trace_probe *tp;
1069 
1070 	field = (struct kprobe_trace_entry_head *)iter->ent;
1071 	tp = container_of(event, struct trace_probe, call.event);
1072 
1073 	trace_seq_printf(s, "%s: (", trace_event_name(&tp->call));
1074 
1075 	if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
1076 		goto out;
1077 
1078 	trace_seq_putc(s, ')');
1079 
1080 	if (print_probe_args(s, tp->args, tp->nr_args,
1081 			     (u8 *)&field[1], field) < 0)
1082 		goto out;
1083 
1084 	trace_seq_putc(s, '\n');
1085  out:
1086 	return trace_handle_return(s);
1087 }
1088 
1089 static enum print_line_t
1090 print_kretprobe_event(struct trace_iterator *iter, int flags,
1091 		      struct trace_event *event)
1092 {
1093 	struct kretprobe_trace_entry_head *field;
1094 	struct trace_seq *s = &iter->seq;
1095 	struct trace_probe *tp;
1096 
1097 	field = (struct kretprobe_trace_entry_head *)iter->ent;
1098 	tp = container_of(event, struct trace_probe, call.event);
1099 
1100 	trace_seq_printf(s, "%s: (", trace_event_name(&tp->call));
1101 
1102 	if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET))
1103 		goto out;
1104 
1105 	trace_seq_puts(s, " <- ");
1106 
1107 	if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET))
1108 		goto out;
1109 
1110 	trace_seq_putc(s, ')');
1111 
1112 	if (print_probe_args(s, tp->args, tp->nr_args,
1113 			     (u8 *)&field[1], field) < 0)
1114 		goto out;
1115 
1116 	trace_seq_putc(s, '\n');
1117 
1118  out:
1119 	return trace_handle_return(s);
1120 }
1121 
1122 
1123 static int kprobe_event_define_fields(struct trace_event_call *event_call)
1124 {
1125 	int ret;
1126 	struct kprobe_trace_entry_head field;
1127 	struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data;
1128 
1129 	DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0);
1130 
1131 	return traceprobe_define_arg_fields(event_call, sizeof(field), &tk->tp);
1132 }
1133 
1134 static int kretprobe_event_define_fields(struct trace_event_call *event_call)
1135 {
1136 	int ret;
1137 	struct kretprobe_trace_entry_head field;
1138 	struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data;
1139 
1140 	DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0);
1141 	DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0);
1142 
1143 	return traceprobe_define_arg_fields(event_call, sizeof(field), &tk->tp);
1144 }
1145 
1146 #ifdef CONFIG_PERF_EVENTS
1147 
1148 /* Kprobe profile handler */
1149 static int
1150 kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs)
1151 {
1152 	struct trace_event_call *call = &tk->tp.call;
1153 	struct kprobe_trace_entry_head *entry;
1154 	struct hlist_head *head;
1155 	int size, __size, dsize;
1156 	int rctx;
1157 
1158 	if (bpf_prog_array_valid(call)) {
1159 		unsigned long orig_ip = instruction_pointer(regs);
1160 		int ret;
1161 
1162 		ret = trace_call_bpf(call, regs);
1163 
1164 		/*
1165 		 * We need to check and see if we modified the pc of the
1166 		 * pt_regs, and if so return 1 so that we don't do the
1167 		 * single stepping.
1168 		 */
1169 		if (orig_ip != instruction_pointer(regs))
1170 			return 1;
1171 		if (!ret)
1172 			return 0;
1173 	}
1174 
1175 	head = this_cpu_ptr(call->perf_events);
1176 	if (hlist_empty(head))
1177 		return 0;
1178 
1179 	dsize = __get_data_size(&tk->tp, regs);
1180 	__size = sizeof(*entry) + tk->tp.size + dsize;
1181 	size = ALIGN(__size + sizeof(u32), sizeof(u64));
1182 	size -= sizeof(u32);
1183 
1184 	entry = perf_trace_buf_alloc(size, NULL, &rctx);
1185 	if (!entry)
1186 		return 0;
1187 
1188 	entry->ip = (unsigned long)tk->rp.kp.addr;
1189 	memset(&entry[1], 0, dsize);
1190 	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
1191 	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
1192 			      head, NULL);
1193 	return 0;
1194 }
1195 NOKPROBE_SYMBOL(kprobe_perf_func);
1196 
1197 /* Kretprobe profile handler */
1198 static void
1199 kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
1200 		    struct pt_regs *regs)
1201 {
1202 	struct trace_event_call *call = &tk->tp.call;
1203 	struct kretprobe_trace_entry_head *entry;
1204 	struct hlist_head *head;
1205 	int size, __size, dsize;
1206 	int rctx;
1207 
1208 	if (bpf_prog_array_valid(call) && !trace_call_bpf(call, regs))
1209 		return;
1210 
1211 	head = this_cpu_ptr(call->perf_events);
1212 	if (hlist_empty(head))
1213 		return;
1214 
1215 	dsize = __get_data_size(&tk->tp, regs);
1216 	__size = sizeof(*entry) + tk->tp.size + dsize;
1217 	size = ALIGN(__size + sizeof(u32), sizeof(u64));
1218 	size -= sizeof(u32);
1219 
1220 	entry = perf_trace_buf_alloc(size, NULL, &rctx);
1221 	if (!entry)
1222 		return;
1223 
1224 	entry->func = (unsigned long)tk->rp.kp.addr;
1225 	entry->ret_ip = (unsigned long)ri->ret_addr;
1226 	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
1227 	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
1228 			      head, NULL);
1229 }
1230 NOKPROBE_SYMBOL(kretprobe_perf_func);
1231 
1232 int bpf_get_kprobe_info(const struct perf_event *event, u32 *fd_type,
1233 			const char **symbol, u64 *probe_offset,
1234 			u64 *probe_addr, bool perf_type_tracepoint)
1235 {
1236 	const char *pevent = trace_event_name(event->tp_event);
1237 	const char *group = event->tp_event->class->system;
1238 	struct trace_kprobe *tk;
1239 
1240 	if (perf_type_tracepoint)
1241 		tk = find_trace_kprobe(pevent, group);
1242 	else
1243 		tk = event->tp_event->data;
1244 	if (!tk)
1245 		return -EINVAL;
1246 
1247 	*fd_type = trace_kprobe_is_return(tk) ? BPF_FD_TYPE_KRETPROBE
1248 					      : BPF_FD_TYPE_KPROBE;
1249 	if (tk->symbol) {
1250 		*symbol = tk->symbol;
1251 		*probe_offset = tk->rp.kp.offset;
1252 		*probe_addr = 0;
1253 	} else {
1254 		*symbol = NULL;
1255 		*probe_offset = 0;
1256 		*probe_addr = (unsigned long)tk->rp.kp.addr;
1257 	}
1258 	return 0;
1259 }
1260 #endif	/* CONFIG_PERF_EVENTS */
1261 
1262 /*
1263  * called by perf_trace_init() or __ftrace_set_clr_event() under event_mutex.
1264  *
1265  * kprobe_trace_self_tests_init() does enable_trace_probe/disable_trace_probe
1266  * lockless, but we can't race with this __init function.
1267  */
1268 static int kprobe_register(struct trace_event_call *event,
1269 			   enum trace_reg type, void *data)
1270 {
1271 	struct trace_kprobe *tk = (struct trace_kprobe *)event->data;
1272 	struct trace_event_file *file = data;
1273 
1274 	switch (type) {
1275 	case TRACE_REG_REGISTER:
1276 		return enable_trace_kprobe(tk, file);
1277 	case TRACE_REG_UNREGISTER:
1278 		return disable_trace_kprobe(tk, file);
1279 
1280 #ifdef CONFIG_PERF_EVENTS
1281 	case TRACE_REG_PERF_REGISTER:
1282 		return enable_trace_kprobe(tk, NULL);
1283 	case TRACE_REG_PERF_UNREGISTER:
1284 		return disable_trace_kprobe(tk, NULL);
1285 	case TRACE_REG_PERF_OPEN:
1286 	case TRACE_REG_PERF_CLOSE:
1287 	case TRACE_REG_PERF_ADD:
1288 	case TRACE_REG_PERF_DEL:
1289 		return 0;
1290 #endif
1291 	}
1292 	return 0;
1293 }
1294 
1295 static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs)
1296 {
1297 	struct trace_kprobe *tk = container_of(kp, struct trace_kprobe, rp.kp);
1298 	int ret = 0;
1299 
1300 	raw_cpu_inc(*tk->nhit);
1301 
1302 	if (tk->tp.flags & TP_FLAG_TRACE)
1303 		kprobe_trace_func(tk, regs);
1304 #ifdef CONFIG_PERF_EVENTS
1305 	if (tk->tp.flags & TP_FLAG_PROFILE)
1306 		ret = kprobe_perf_func(tk, regs);
1307 #endif
1308 	return ret;
1309 }
1310 NOKPROBE_SYMBOL(kprobe_dispatcher);
1311 
1312 static int
1313 kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs)
1314 {
1315 	struct trace_kprobe *tk = container_of(ri->rp, struct trace_kprobe, rp);
1316 
1317 	raw_cpu_inc(*tk->nhit);
1318 
1319 	if (tk->tp.flags & TP_FLAG_TRACE)
1320 		kretprobe_trace_func(tk, ri, regs);
1321 #ifdef CONFIG_PERF_EVENTS
1322 	if (tk->tp.flags & TP_FLAG_PROFILE)
1323 		kretprobe_perf_func(tk, ri, regs);
1324 #endif
1325 	return 0;	/* We don't tweek kernel, so just return 0 */
1326 }
1327 NOKPROBE_SYMBOL(kretprobe_dispatcher);
1328 
1329 static struct trace_event_functions kretprobe_funcs = {
1330 	.trace		= print_kretprobe_event
1331 };
1332 
1333 static struct trace_event_functions kprobe_funcs = {
1334 	.trace		= print_kprobe_event
1335 };
1336 
1337 static inline void init_trace_event_call(struct trace_kprobe *tk,
1338 					 struct trace_event_call *call)
1339 {
1340 	INIT_LIST_HEAD(&call->class->fields);
1341 	if (trace_kprobe_is_return(tk)) {
1342 		call->event.funcs = &kretprobe_funcs;
1343 		call->class->define_fields = kretprobe_event_define_fields;
1344 	} else {
1345 		call->event.funcs = &kprobe_funcs;
1346 		call->class->define_fields = kprobe_event_define_fields;
1347 	}
1348 
1349 	call->flags = TRACE_EVENT_FL_KPROBE;
1350 	call->class->reg = kprobe_register;
1351 	call->data = tk;
1352 }
1353 
1354 static int register_kprobe_event(struct trace_kprobe *tk)
1355 {
1356 	struct trace_event_call *call = &tk->tp.call;
1357 	int ret = 0;
1358 
1359 	init_trace_event_call(tk, call);
1360 
1361 	if (traceprobe_set_print_fmt(&tk->tp, trace_kprobe_is_return(tk)) < 0)
1362 		return -ENOMEM;
1363 	ret = register_trace_event(&call->event);
1364 	if (!ret) {
1365 		kfree(call->print_fmt);
1366 		return -ENODEV;
1367 	}
1368 	ret = trace_add_event_call(call);
1369 	if (ret) {
1370 		pr_info("Failed to register kprobe event: %s\n",
1371 			trace_event_name(call));
1372 		kfree(call->print_fmt);
1373 		unregister_trace_event(&call->event);
1374 	}
1375 	return ret;
1376 }
1377 
1378 static int unregister_kprobe_event(struct trace_kprobe *tk)
1379 {
1380 	int ret;
1381 
1382 	/* tp->event is unregistered in trace_remove_event_call() */
1383 	ret = trace_remove_event_call(&tk->tp.call);
1384 	if (!ret)
1385 		kfree(tk->tp.call.print_fmt);
1386 	return ret;
1387 }
1388 
1389 #ifdef CONFIG_PERF_EVENTS
1390 /* create a trace_kprobe, but don't add it to global lists */
1391 struct trace_event_call *
1392 create_local_trace_kprobe(char *func, void *addr, unsigned long offs,
1393 			  bool is_return)
1394 {
1395 	struct trace_kprobe *tk;
1396 	int ret;
1397 	char *event;
1398 
1399 	/*
1400 	 * local trace_kprobes are not added to dyn_event, so they are never
1401 	 * searched in find_trace_kprobe(). Therefore, there is no concern of
1402 	 * duplicated name here.
1403 	 */
1404 	event = func ? func : "DUMMY_EVENT";
1405 
1406 	tk = alloc_trace_kprobe(KPROBE_EVENT_SYSTEM, event, (void *)addr, func,
1407 				offs, 0 /* maxactive */, 0 /* nargs */,
1408 				is_return);
1409 
1410 	if (IS_ERR(tk)) {
1411 		pr_info("Failed to allocate trace_probe.(%d)\n",
1412 			(int)PTR_ERR(tk));
1413 		return ERR_CAST(tk);
1414 	}
1415 
1416 	init_trace_event_call(tk, &tk->tp.call);
1417 
1418 	if (traceprobe_set_print_fmt(&tk->tp, trace_kprobe_is_return(tk)) < 0) {
1419 		ret = -ENOMEM;
1420 		goto error;
1421 	}
1422 
1423 	ret = __register_trace_kprobe(tk);
1424 	if (ret < 0) {
1425 		kfree(tk->tp.call.print_fmt);
1426 		goto error;
1427 	}
1428 
1429 	return &tk->tp.call;
1430 error:
1431 	free_trace_kprobe(tk);
1432 	return ERR_PTR(ret);
1433 }
1434 
1435 void destroy_local_trace_kprobe(struct trace_event_call *event_call)
1436 {
1437 	struct trace_kprobe *tk;
1438 
1439 	tk = container_of(event_call, struct trace_kprobe, tp.call);
1440 
1441 	if (trace_probe_is_enabled(&tk->tp)) {
1442 		WARN_ON(1);
1443 		return;
1444 	}
1445 
1446 	__unregister_trace_kprobe(tk);
1447 
1448 	kfree(tk->tp.call.print_fmt);
1449 	free_trace_kprobe(tk);
1450 }
1451 #endif /* CONFIG_PERF_EVENTS */
1452 
1453 /* Make a tracefs interface for controlling probe points */
1454 static __init int init_kprobe_trace(void)
1455 {
1456 	struct dentry *d_tracer;
1457 	struct dentry *entry;
1458 	int ret;
1459 
1460 	ret = dyn_event_register(&trace_kprobe_ops);
1461 	if (ret)
1462 		return ret;
1463 
1464 	if (register_module_notifier(&trace_kprobe_module_nb))
1465 		return -EINVAL;
1466 
1467 	d_tracer = tracing_init_dentry();
1468 	if (IS_ERR(d_tracer))
1469 		return 0;
1470 
1471 	entry = tracefs_create_file("kprobe_events", 0644, d_tracer,
1472 				    NULL, &kprobe_events_ops);
1473 
1474 	/* Event list interface */
1475 	if (!entry)
1476 		pr_warn("Could not create tracefs 'kprobe_events' entry\n");
1477 
1478 	/* Profile interface */
1479 	entry = tracefs_create_file("kprobe_profile", 0444, d_tracer,
1480 				    NULL, &kprobe_profile_ops);
1481 
1482 	if (!entry)
1483 		pr_warn("Could not create tracefs 'kprobe_profile' entry\n");
1484 	return 0;
1485 }
1486 fs_initcall(init_kprobe_trace);
1487 
1488 
1489 #ifdef CONFIG_FTRACE_STARTUP_TEST
1490 static __init struct trace_event_file *
1491 find_trace_probe_file(struct trace_kprobe *tk, struct trace_array *tr)
1492 {
1493 	struct trace_event_file *file;
1494 
1495 	list_for_each_entry(file, &tr->events, list)
1496 		if (file->event_call == &tk->tp.call)
1497 			return file;
1498 
1499 	return NULL;
1500 }
1501 
1502 /*
1503  * Nobody but us can call enable_trace_kprobe/disable_trace_kprobe at this
1504  * stage, we can do this lockless.
1505  */
1506 static __init int kprobe_trace_self_tests_init(void)
1507 {
1508 	int ret, warn = 0;
1509 	int (*target)(int, int, int, int, int, int);
1510 	struct trace_kprobe *tk;
1511 	struct trace_event_file *file;
1512 
1513 	if (tracing_is_disabled())
1514 		return -ENODEV;
1515 
1516 	target = kprobe_trace_selftest_target;
1517 
1518 	pr_info("Testing kprobe tracing: ");
1519 
1520 	ret = trace_run_command("p:testprobe kprobe_trace_selftest_target $stack $stack0 +0($stack)",
1521 				create_or_delete_trace_kprobe);
1522 	if (WARN_ON_ONCE(ret)) {
1523 		pr_warn("error on probing function entry.\n");
1524 		warn++;
1525 	} else {
1526 		/* Enable trace point */
1527 		tk = find_trace_kprobe("testprobe", KPROBE_EVENT_SYSTEM);
1528 		if (WARN_ON_ONCE(tk == NULL)) {
1529 			pr_warn("error on getting new probe.\n");
1530 			warn++;
1531 		} else {
1532 			file = find_trace_probe_file(tk, top_trace_array());
1533 			if (WARN_ON_ONCE(file == NULL)) {
1534 				pr_warn("error on getting probe file.\n");
1535 				warn++;
1536 			} else
1537 				enable_trace_kprobe(tk, file);
1538 		}
1539 	}
1540 
1541 	ret = trace_run_command("r:testprobe2 kprobe_trace_selftest_target $retval",
1542 				create_or_delete_trace_kprobe);
1543 	if (WARN_ON_ONCE(ret)) {
1544 		pr_warn("error on probing function return.\n");
1545 		warn++;
1546 	} else {
1547 		/* Enable trace point */
1548 		tk = find_trace_kprobe("testprobe2", KPROBE_EVENT_SYSTEM);
1549 		if (WARN_ON_ONCE(tk == NULL)) {
1550 			pr_warn("error on getting 2nd new probe.\n");
1551 			warn++;
1552 		} else {
1553 			file = find_trace_probe_file(tk, top_trace_array());
1554 			if (WARN_ON_ONCE(file == NULL)) {
1555 				pr_warn("error on getting probe file.\n");
1556 				warn++;
1557 			} else
1558 				enable_trace_kprobe(tk, file);
1559 		}
1560 	}
1561 
1562 	if (warn)
1563 		goto end;
1564 
1565 	ret = target(1, 2, 3, 4, 5, 6);
1566 
1567 	/*
1568 	 * Not expecting an error here, the check is only to prevent the
1569 	 * optimizer from removing the call to target() as otherwise there
1570 	 * are no side-effects and the call is never performed.
1571 	 */
1572 	if (ret != 21)
1573 		warn++;
1574 
1575 	/* Disable trace points before removing it */
1576 	tk = find_trace_kprobe("testprobe", KPROBE_EVENT_SYSTEM);
1577 	if (WARN_ON_ONCE(tk == NULL)) {
1578 		pr_warn("error on getting test probe.\n");
1579 		warn++;
1580 	} else {
1581 		if (trace_kprobe_nhit(tk) != 1) {
1582 			pr_warn("incorrect number of testprobe hits\n");
1583 			warn++;
1584 		}
1585 
1586 		file = find_trace_probe_file(tk, top_trace_array());
1587 		if (WARN_ON_ONCE(file == NULL)) {
1588 			pr_warn("error on getting probe file.\n");
1589 			warn++;
1590 		} else
1591 			disable_trace_kprobe(tk, file);
1592 	}
1593 
1594 	tk = find_trace_kprobe("testprobe2", KPROBE_EVENT_SYSTEM);
1595 	if (WARN_ON_ONCE(tk == NULL)) {
1596 		pr_warn("error on getting 2nd test probe.\n");
1597 		warn++;
1598 	} else {
1599 		if (trace_kprobe_nhit(tk) != 1) {
1600 			pr_warn("incorrect number of testprobe2 hits\n");
1601 			warn++;
1602 		}
1603 
1604 		file = find_trace_probe_file(tk, top_trace_array());
1605 		if (WARN_ON_ONCE(file == NULL)) {
1606 			pr_warn("error on getting probe file.\n");
1607 			warn++;
1608 		} else
1609 			disable_trace_kprobe(tk, file);
1610 	}
1611 
1612 	ret = trace_run_command("-:testprobe", create_or_delete_trace_kprobe);
1613 	if (WARN_ON_ONCE(ret)) {
1614 		pr_warn("error on deleting a probe.\n");
1615 		warn++;
1616 	}
1617 
1618 	ret = trace_run_command("-:testprobe2", create_or_delete_trace_kprobe);
1619 	if (WARN_ON_ONCE(ret)) {
1620 		pr_warn("error on deleting a probe.\n");
1621 		warn++;
1622 	}
1623 
1624 end:
1625 	ret = dyn_events_release_all(&trace_kprobe_ops);
1626 	if (WARN_ON_ONCE(ret)) {
1627 		pr_warn("error on cleaning up probes.\n");
1628 		warn++;
1629 	}
1630 	/*
1631 	 * Wait for the optimizer work to finish. Otherwise it might fiddle
1632 	 * with probes in already freed __init text.
1633 	 */
1634 	wait_for_kprobe_optimizer();
1635 	if (warn)
1636 		pr_cont("NG: Some tests are failed. Please check them.\n");
1637 	else
1638 		pr_cont("OK\n");
1639 	return 0;
1640 }
1641 
1642 late_initcall(kprobe_trace_self_tests_init);
1643 
1644 #endif
1645