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