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