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