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