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 #include <linux/kprobes.h> 23 #include <linux/seq_file.h> 24 #include <linux/slab.h> 25 #include <linux/smp.h> 26 #include <linux/debugfs.h> 27 #include <linux/types.h> 28 #include <linux/string.h> 29 #include <linux/ctype.h> 30 #include <linux/ptrace.h> 31 #include <linux/perf_event.h> 32 #include <linux/stringify.h> 33 #include <linux/limits.h> 34 #include <asm/bitsperlong.h> 35 36 #include "trace.h" 37 #include "trace_output.h" 38 39 #define MAX_TRACE_ARGS 128 40 #define MAX_ARGSTR_LEN 63 41 #define MAX_EVENT_NAME_LEN 64 42 #define MAX_STRING_SIZE PATH_MAX 43 #define KPROBE_EVENT_SYSTEM "kprobes" 44 45 /* Reserved field names */ 46 #define FIELD_STRING_IP "__probe_ip" 47 #define FIELD_STRING_RETIP "__probe_ret_ip" 48 #define FIELD_STRING_FUNC "__probe_func" 49 50 const char *reserved_field_names[] = { 51 "common_type", 52 "common_flags", 53 "common_preempt_count", 54 "common_pid", 55 "common_tgid", 56 FIELD_STRING_IP, 57 FIELD_STRING_RETIP, 58 FIELD_STRING_FUNC, 59 }; 60 61 /* Printing function type */ 62 typedef int (*print_type_func_t)(struct trace_seq *, const char *, void *, 63 void *); 64 #define PRINT_TYPE_FUNC_NAME(type) print_type_##type 65 #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type 66 67 /* Printing in basic type function template */ 68 #define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ 69 static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ 70 const char *name, \ 71 void *data, void *ent)\ 72 { \ 73 return trace_seq_printf(s, " %s=" fmt, name, (cast)*(type *)data);\ 74 } \ 75 static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; 76 77 DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) 78 DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) 79 DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) 80 DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) 81 DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) 82 DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) 83 DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) 84 DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) 85 86 /* data_rloc: data relative location, compatible with u32 */ 87 #define make_data_rloc(len, roffs) \ 88 (((u32)(len) << 16) | ((u32)(roffs) & 0xffff)) 89 #define get_rloc_len(dl) ((u32)(dl) >> 16) 90 #define get_rloc_offs(dl) ((u32)(dl) & 0xffff) 91 92 static inline void *get_rloc_data(u32 *dl) 93 { 94 return (u8 *)dl + get_rloc_offs(*dl); 95 } 96 97 /* For data_loc conversion */ 98 static inline void *get_loc_data(u32 *dl, void *ent) 99 { 100 return (u8 *)ent + get_rloc_offs(*dl); 101 } 102 103 /* 104 * Convert data_rloc to data_loc: 105 * data_rloc stores the offset from data_rloc itself, but data_loc 106 * stores the offset from event entry. 107 */ 108 #define convert_rloc_to_loc(dl, offs) ((u32)(dl) + (offs)) 109 110 /* For defining macros, define string/string_size types */ 111 typedef u32 string; 112 typedef u32 string_size; 113 114 /* Print type function for string type */ 115 static __kprobes int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s, 116 const char *name, 117 void *data, void *ent) 118 { 119 int len = *(u32 *)data >> 16; 120 121 if (!len) 122 return trace_seq_printf(s, " %s=(fault)", name); 123 else 124 return trace_seq_printf(s, " %s=\"%s\"", name, 125 (const char *)get_loc_data(data, ent)); 126 } 127 static const char PRINT_TYPE_FMT_NAME(string)[] = "\\\"%s\\\""; 128 129 /* Data fetch function type */ 130 typedef void (*fetch_func_t)(struct pt_regs *, void *, void *); 131 132 struct fetch_param { 133 fetch_func_t fn; 134 void *data; 135 }; 136 137 static __kprobes void call_fetch(struct fetch_param *fprm, 138 struct pt_regs *regs, void *dest) 139 { 140 return fprm->fn(regs, fprm->data, dest); 141 } 142 143 #define FETCH_FUNC_NAME(method, type) fetch_##method##_##type 144 /* 145 * Define macro for basic types - we don't need to define s* types, because 146 * we have to care only about bitwidth at recording time. 147 */ 148 #define DEFINE_BASIC_FETCH_FUNCS(method) \ 149 DEFINE_FETCH_##method(u8) \ 150 DEFINE_FETCH_##method(u16) \ 151 DEFINE_FETCH_##method(u32) \ 152 DEFINE_FETCH_##method(u64) 153 154 #define CHECK_FETCH_FUNCS(method, fn) \ 155 (((FETCH_FUNC_NAME(method, u8) == fn) || \ 156 (FETCH_FUNC_NAME(method, u16) == fn) || \ 157 (FETCH_FUNC_NAME(method, u32) == fn) || \ 158 (FETCH_FUNC_NAME(method, u64) == fn) || \ 159 (FETCH_FUNC_NAME(method, string) == fn) || \ 160 (FETCH_FUNC_NAME(method, string_size) == fn)) \ 161 && (fn != NULL)) 162 163 /* Data fetch function templates */ 164 #define DEFINE_FETCH_reg(type) \ 165 static __kprobes void FETCH_FUNC_NAME(reg, type)(struct pt_regs *regs, \ 166 void *offset, void *dest) \ 167 { \ 168 *(type *)dest = (type)regs_get_register(regs, \ 169 (unsigned int)((unsigned long)offset)); \ 170 } 171 DEFINE_BASIC_FETCH_FUNCS(reg) 172 /* No string on the register */ 173 #define fetch_reg_string NULL 174 #define fetch_reg_string_size NULL 175 176 #define DEFINE_FETCH_stack(type) \ 177 static __kprobes void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs,\ 178 void *offset, void *dest) \ 179 { \ 180 *(type *)dest = (type)regs_get_kernel_stack_nth(regs, \ 181 (unsigned int)((unsigned long)offset)); \ 182 } 183 DEFINE_BASIC_FETCH_FUNCS(stack) 184 /* No string on the stack entry */ 185 #define fetch_stack_string NULL 186 #define fetch_stack_string_size NULL 187 188 #define DEFINE_FETCH_retval(type) \ 189 static __kprobes void FETCH_FUNC_NAME(retval, type)(struct pt_regs *regs,\ 190 void *dummy, void *dest) \ 191 { \ 192 *(type *)dest = (type)regs_return_value(regs); \ 193 } 194 DEFINE_BASIC_FETCH_FUNCS(retval) 195 /* No string on the retval */ 196 #define fetch_retval_string NULL 197 #define fetch_retval_string_size NULL 198 199 #define DEFINE_FETCH_memory(type) \ 200 static __kprobes void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs,\ 201 void *addr, void *dest) \ 202 { \ 203 type retval; \ 204 if (probe_kernel_address(addr, retval)) \ 205 *(type *)dest = 0; \ 206 else \ 207 *(type *)dest = retval; \ 208 } 209 DEFINE_BASIC_FETCH_FUNCS(memory) 210 /* 211 * Fetch a null-terminated string. Caller MUST set *(u32 *)dest with max 212 * length and relative data location. 213 */ 214 static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs, 215 void *addr, void *dest) 216 { 217 long ret; 218 int maxlen = get_rloc_len(*(u32 *)dest); 219 u8 *dst = get_rloc_data(dest); 220 u8 *src = addr; 221 mm_segment_t old_fs = get_fs(); 222 if (!maxlen) 223 return; 224 /* 225 * Try to get string again, since the string can be changed while 226 * probing. 227 */ 228 set_fs(KERNEL_DS); 229 pagefault_disable(); 230 do 231 ret = __copy_from_user_inatomic(dst++, src++, 1); 232 while (dst[-1] && ret == 0 && src - (u8 *)addr < maxlen); 233 dst[-1] = '\0'; 234 pagefault_enable(); 235 set_fs(old_fs); 236 237 if (ret < 0) { /* Failed to fetch string */ 238 ((u8 *)get_rloc_data(dest))[0] = '\0'; 239 *(u32 *)dest = make_data_rloc(0, get_rloc_offs(*(u32 *)dest)); 240 } else 241 *(u32 *)dest = make_data_rloc(src - (u8 *)addr, 242 get_rloc_offs(*(u32 *)dest)); 243 } 244 /* Return the length of string -- including null terminal byte */ 245 static __kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs, 246 void *addr, void *dest) 247 { 248 int ret, len = 0; 249 u8 c; 250 mm_segment_t old_fs = get_fs(); 251 252 set_fs(KERNEL_DS); 253 pagefault_disable(); 254 do { 255 ret = __copy_from_user_inatomic(&c, (u8 *)addr + len, 1); 256 len++; 257 } while (c && ret == 0 && len < MAX_STRING_SIZE); 258 pagefault_enable(); 259 set_fs(old_fs); 260 261 if (ret < 0) /* Failed to check the length */ 262 *(u32 *)dest = 0; 263 else 264 *(u32 *)dest = len; 265 } 266 267 /* Memory fetching by symbol */ 268 struct symbol_cache { 269 char *symbol; 270 long offset; 271 unsigned long addr; 272 }; 273 274 static unsigned long update_symbol_cache(struct symbol_cache *sc) 275 { 276 sc->addr = (unsigned long)kallsyms_lookup_name(sc->symbol); 277 if (sc->addr) 278 sc->addr += sc->offset; 279 return sc->addr; 280 } 281 282 static void free_symbol_cache(struct symbol_cache *sc) 283 { 284 kfree(sc->symbol); 285 kfree(sc); 286 } 287 288 static struct symbol_cache *alloc_symbol_cache(const char *sym, long offset) 289 { 290 struct symbol_cache *sc; 291 292 if (!sym || strlen(sym) == 0) 293 return NULL; 294 sc = kzalloc(sizeof(struct symbol_cache), GFP_KERNEL); 295 if (!sc) 296 return NULL; 297 298 sc->symbol = kstrdup(sym, GFP_KERNEL); 299 if (!sc->symbol) { 300 kfree(sc); 301 return NULL; 302 } 303 sc->offset = offset; 304 305 update_symbol_cache(sc); 306 return sc; 307 } 308 309 #define DEFINE_FETCH_symbol(type) \ 310 static __kprobes void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs,\ 311 void *data, void *dest) \ 312 { \ 313 struct symbol_cache *sc = data; \ 314 if (sc->addr) \ 315 fetch_memory_##type(regs, (void *)sc->addr, dest); \ 316 else \ 317 *(type *)dest = 0; \ 318 } 319 DEFINE_BASIC_FETCH_FUNCS(symbol) 320 DEFINE_FETCH_symbol(string) 321 DEFINE_FETCH_symbol(string_size) 322 323 /* Dereference memory access function */ 324 struct deref_fetch_param { 325 struct fetch_param orig; 326 long offset; 327 }; 328 329 #define DEFINE_FETCH_deref(type) \ 330 static __kprobes void FETCH_FUNC_NAME(deref, type)(struct pt_regs *regs,\ 331 void *data, void *dest) \ 332 { \ 333 struct deref_fetch_param *dprm = data; \ 334 unsigned long addr; \ 335 call_fetch(&dprm->orig, regs, &addr); \ 336 if (addr) { \ 337 addr += dprm->offset; \ 338 fetch_memory_##type(regs, (void *)addr, dest); \ 339 } else \ 340 *(type *)dest = 0; \ 341 } 342 DEFINE_BASIC_FETCH_FUNCS(deref) 343 DEFINE_FETCH_deref(string) 344 DEFINE_FETCH_deref(string_size) 345 346 static __kprobes void update_deref_fetch_param(struct deref_fetch_param *data) 347 { 348 if (CHECK_FETCH_FUNCS(deref, data->orig.fn)) 349 update_deref_fetch_param(data->orig.data); 350 else if (CHECK_FETCH_FUNCS(symbol, data->orig.fn)) 351 update_symbol_cache(data->orig.data); 352 } 353 354 static __kprobes void free_deref_fetch_param(struct deref_fetch_param *data) 355 { 356 if (CHECK_FETCH_FUNCS(deref, data->orig.fn)) 357 free_deref_fetch_param(data->orig.data); 358 else if (CHECK_FETCH_FUNCS(symbol, data->orig.fn)) 359 free_symbol_cache(data->orig.data); 360 kfree(data); 361 } 362 363 /* Bitfield fetch function */ 364 struct bitfield_fetch_param { 365 struct fetch_param orig; 366 unsigned char hi_shift; 367 unsigned char low_shift; 368 }; 369 370 #define DEFINE_FETCH_bitfield(type) \ 371 static __kprobes void FETCH_FUNC_NAME(bitfield, type)(struct pt_regs *regs,\ 372 void *data, void *dest) \ 373 { \ 374 struct bitfield_fetch_param *bprm = data; \ 375 type buf = 0; \ 376 call_fetch(&bprm->orig, regs, &buf); \ 377 if (buf) { \ 378 buf <<= bprm->hi_shift; \ 379 buf >>= bprm->low_shift; \ 380 } \ 381 *(type *)dest = buf; \ 382 } 383 DEFINE_BASIC_FETCH_FUNCS(bitfield) 384 #define fetch_bitfield_string NULL 385 #define fetch_bitfield_string_size NULL 386 387 static __kprobes void 388 update_bitfield_fetch_param(struct bitfield_fetch_param *data) 389 { 390 /* 391 * Don't check the bitfield itself, because this must be the 392 * last fetch function. 393 */ 394 if (CHECK_FETCH_FUNCS(deref, data->orig.fn)) 395 update_deref_fetch_param(data->orig.data); 396 else if (CHECK_FETCH_FUNCS(symbol, data->orig.fn)) 397 update_symbol_cache(data->orig.data); 398 } 399 400 static __kprobes void 401 free_bitfield_fetch_param(struct bitfield_fetch_param *data) 402 { 403 /* 404 * Don't check the bitfield itself, because this must be the 405 * last fetch function. 406 */ 407 if (CHECK_FETCH_FUNCS(deref, data->orig.fn)) 408 free_deref_fetch_param(data->orig.data); 409 else if (CHECK_FETCH_FUNCS(symbol, data->orig.fn)) 410 free_symbol_cache(data->orig.data); 411 kfree(data); 412 } 413 414 /* Default (unsigned long) fetch type */ 415 #define __DEFAULT_FETCH_TYPE(t) u##t 416 #define _DEFAULT_FETCH_TYPE(t) __DEFAULT_FETCH_TYPE(t) 417 #define DEFAULT_FETCH_TYPE _DEFAULT_FETCH_TYPE(BITS_PER_LONG) 418 #define DEFAULT_FETCH_TYPE_STR __stringify(DEFAULT_FETCH_TYPE) 419 420 /* Fetch types */ 421 enum { 422 FETCH_MTD_reg = 0, 423 FETCH_MTD_stack, 424 FETCH_MTD_retval, 425 FETCH_MTD_memory, 426 FETCH_MTD_symbol, 427 FETCH_MTD_deref, 428 FETCH_MTD_bitfield, 429 FETCH_MTD_END, 430 }; 431 432 #define ASSIGN_FETCH_FUNC(method, type) \ 433 [FETCH_MTD_##method] = FETCH_FUNC_NAME(method, type) 434 435 #define __ASSIGN_FETCH_TYPE(_name, ptype, ftype, _size, sign, _fmttype) \ 436 {.name = _name, \ 437 .size = _size, \ 438 .is_signed = sign, \ 439 .print = PRINT_TYPE_FUNC_NAME(ptype), \ 440 .fmt = PRINT_TYPE_FMT_NAME(ptype), \ 441 .fmttype = _fmttype, \ 442 .fetch = { \ 443 ASSIGN_FETCH_FUNC(reg, ftype), \ 444 ASSIGN_FETCH_FUNC(stack, ftype), \ 445 ASSIGN_FETCH_FUNC(retval, ftype), \ 446 ASSIGN_FETCH_FUNC(memory, ftype), \ 447 ASSIGN_FETCH_FUNC(symbol, ftype), \ 448 ASSIGN_FETCH_FUNC(deref, ftype), \ 449 ASSIGN_FETCH_FUNC(bitfield, ftype), \ 450 } \ 451 } 452 453 #define ASSIGN_FETCH_TYPE(ptype, ftype, sign) \ 454 __ASSIGN_FETCH_TYPE(#ptype, ptype, ftype, sizeof(ftype), sign, #ptype) 455 456 #define FETCH_TYPE_STRING 0 457 #define FETCH_TYPE_STRSIZE 1 458 459 /* Fetch type information table */ 460 static const struct fetch_type { 461 const char *name; /* Name of type */ 462 size_t size; /* Byte size of type */ 463 int is_signed; /* Signed flag */ 464 print_type_func_t print; /* Print functions */ 465 const char *fmt; /* Fromat string */ 466 const char *fmttype; /* Name in format file */ 467 /* Fetch functions */ 468 fetch_func_t fetch[FETCH_MTD_END]; 469 } fetch_type_table[] = { 470 /* Special types */ 471 [FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string, 472 sizeof(u32), 1, "__data_loc char[]"), 473 [FETCH_TYPE_STRSIZE] = __ASSIGN_FETCH_TYPE("string_size", u32, 474 string_size, sizeof(u32), 0, "u32"), 475 /* Basic types */ 476 ASSIGN_FETCH_TYPE(u8, u8, 0), 477 ASSIGN_FETCH_TYPE(u16, u16, 0), 478 ASSIGN_FETCH_TYPE(u32, u32, 0), 479 ASSIGN_FETCH_TYPE(u64, u64, 0), 480 ASSIGN_FETCH_TYPE(s8, u8, 1), 481 ASSIGN_FETCH_TYPE(s16, u16, 1), 482 ASSIGN_FETCH_TYPE(s32, u32, 1), 483 ASSIGN_FETCH_TYPE(s64, u64, 1), 484 }; 485 486 static const struct fetch_type *find_fetch_type(const char *type) 487 { 488 int i; 489 490 if (!type) 491 type = DEFAULT_FETCH_TYPE_STR; 492 493 /* Special case: bitfield */ 494 if (*type == 'b') { 495 unsigned long bs; 496 type = strchr(type, '/'); 497 if (!type) 498 goto fail; 499 type++; 500 if (strict_strtoul(type, 0, &bs)) 501 goto fail; 502 switch (bs) { 503 case 8: 504 return find_fetch_type("u8"); 505 case 16: 506 return find_fetch_type("u16"); 507 case 32: 508 return find_fetch_type("u32"); 509 case 64: 510 return find_fetch_type("u64"); 511 default: 512 goto fail; 513 } 514 } 515 516 for (i = 0; i < ARRAY_SIZE(fetch_type_table); i++) 517 if (strcmp(type, fetch_type_table[i].name) == 0) 518 return &fetch_type_table[i]; 519 fail: 520 return NULL; 521 } 522 523 /* Special function : only accept unsigned long */ 524 static __kprobes void fetch_stack_address(struct pt_regs *regs, 525 void *dummy, void *dest) 526 { 527 *(unsigned long *)dest = kernel_stack_pointer(regs); 528 } 529 530 static fetch_func_t get_fetch_size_function(const struct fetch_type *type, 531 fetch_func_t orig_fn) 532 { 533 int i; 534 535 if (type != &fetch_type_table[FETCH_TYPE_STRING]) 536 return NULL; /* Only string type needs size function */ 537 for (i = 0; i < FETCH_MTD_END; i++) 538 if (type->fetch[i] == orig_fn) 539 return fetch_type_table[FETCH_TYPE_STRSIZE].fetch[i]; 540 541 WARN_ON(1); /* This should not happen */ 542 return NULL; 543 } 544 545 /** 546 * Kprobe event core functions 547 */ 548 549 struct probe_arg { 550 struct fetch_param fetch; 551 struct fetch_param fetch_size; 552 unsigned int offset; /* Offset from argument entry */ 553 const char *name; /* Name of this argument */ 554 const char *comm; /* Command of this argument */ 555 const struct fetch_type *type; /* Type of this argument */ 556 }; 557 558 /* Flags for trace_probe */ 559 #define TP_FLAG_TRACE 1 560 #define TP_FLAG_PROFILE 2 561 #define TP_FLAG_REGISTERED 4 562 563 struct trace_probe { 564 struct list_head list; 565 struct kretprobe rp; /* Use rp.kp for kprobe use */ 566 unsigned long nhit; 567 unsigned int flags; /* For TP_FLAG_* */ 568 const char *symbol; /* symbol name */ 569 struct ftrace_event_class class; 570 struct ftrace_event_call call; 571 ssize_t size; /* trace entry size */ 572 unsigned int nr_args; 573 struct probe_arg args[]; 574 }; 575 576 #define SIZEOF_TRACE_PROBE(n) \ 577 (offsetof(struct trace_probe, args) + \ 578 (sizeof(struct probe_arg) * (n))) 579 580 581 static __kprobes int trace_probe_is_return(struct trace_probe *tp) 582 { 583 return tp->rp.handler != NULL; 584 } 585 586 static __kprobes const char *trace_probe_symbol(struct trace_probe *tp) 587 { 588 return tp->symbol ? tp->symbol : "unknown"; 589 } 590 591 static __kprobes unsigned long trace_probe_offset(struct trace_probe *tp) 592 { 593 return tp->rp.kp.offset; 594 } 595 596 static __kprobes bool trace_probe_is_enabled(struct trace_probe *tp) 597 { 598 return !!(tp->flags & (TP_FLAG_TRACE | TP_FLAG_PROFILE)); 599 } 600 601 static __kprobes bool trace_probe_is_registered(struct trace_probe *tp) 602 { 603 return !!(tp->flags & TP_FLAG_REGISTERED); 604 } 605 606 static __kprobes bool trace_probe_has_gone(struct trace_probe *tp) 607 { 608 return !!(kprobe_gone(&tp->rp.kp)); 609 } 610 611 static __kprobes bool trace_probe_within_module(struct trace_probe *tp, 612 struct module *mod) 613 { 614 int len = strlen(mod->name); 615 const char *name = trace_probe_symbol(tp); 616 return strncmp(mod->name, name, len) == 0 && name[len] == ':'; 617 } 618 619 static __kprobes bool trace_probe_is_on_module(struct trace_probe *tp) 620 { 621 return !!strchr(trace_probe_symbol(tp), ':'); 622 } 623 624 static int register_probe_event(struct trace_probe *tp); 625 static void unregister_probe_event(struct trace_probe *tp); 626 627 static DEFINE_MUTEX(probe_lock); 628 static LIST_HEAD(probe_list); 629 630 static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs); 631 static int kretprobe_dispatcher(struct kretprobe_instance *ri, 632 struct pt_regs *regs); 633 634 /* Check the name is good for event/group/fields */ 635 static int is_good_name(const char *name) 636 { 637 if (!isalpha(*name) && *name != '_') 638 return 0; 639 while (*++name != '\0') { 640 if (!isalpha(*name) && !isdigit(*name) && *name != '_') 641 return 0; 642 } 643 return 1; 644 } 645 646 /* 647 * Allocate new trace_probe and initialize it (including kprobes). 648 */ 649 static struct trace_probe *alloc_trace_probe(const char *group, 650 const char *event, 651 void *addr, 652 const char *symbol, 653 unsigned long offs, 654 int nargs, int is_return) 655 { 656 struct trace_probe *tp; 657 int ret = -ENOMEM; 658 659 tp = kzalloc(SIZEOF_TRACE_PROBE(nargs), GFP_KERNEL); 660 if (!tp) 661 return ERR_PTR(ret); 662 663 if (symbol) { 664 tp->symbol = kstrdup(symbol, GFP_KERNEL); 665 if (!tp->symbol) 666 goto error; 667 tp->rp.kp.symbol_name = tp->symbol; 668 tp->rp.kp.offset = offs; 669 } else 670 tp->rp.kp.addr = addr; 671 672 if (is_return) 673 tp->rp.handler = kretprobe_dispatcher; 674 else 675 tp->rp.kp.pre_handler = kprobe_dispatcher; 676 677 if (!event || !is_good_name(event)) { 678 ret = -EINVAL; 679 goto error; 680 } 681 682 tp->call.class = &tp->class; 683 tp->call.name = kstrdup(event, GFP_KERNEL); 684 if (!tp->call.name) 685 goto error; 686 687 if (!group || !is_good_name(group)) { 688 ret = -EINVAL; 689 goto error; 690 } 691 692 tp->class.system = kstrdup(group, GFP_KERNEL); 693 if (!tp->class.system) 694 goto error; 695 696 INIT_LIST_HEAD(&tp->list); 697 return tp; 698 error: 699 kfree(tp->call.name); 700 kfree(tp->symbol); 701 kfree(tp); 702 return ERR_PTR(ret); 703 } 704 705 static void update_probe_arg(struct probe_arg *arg) 706 { 707 if (CHECK_FETCH_FUNCS(bitfield, arg->fetch.fn)) 708 update_bitfield_fetch_param(arg->fetch.data); 709 else if (CHECK_FETCH_FUNCS(deref, arg->fetch.fn)) 710 update_deref_fetch_param(arg->fetch.data); 711 else if (CHECK_FETCH_FUNCS(symbol, arg->fetch.fn)) 712 update_symbol_cache(arg->fetch.data); 713 } 714 715 static void free_probe_arg(struct probe_arg *arg) 716 { 717 if (CHECK_FETCH_FUNCS(bitfield, arg->fetch.fn)) 718 free_bitfield_fetch_param(arg->fetch.data); 719 else if (CHECK_FETCH_FUNCS(deref, arg->fetch.fn)) 720 free_deref_fetch_param(arg->fetch.data); 721 else if (CHECK_FETCH_FUNCS(symbol, arg->fetch.fn)) 722 free_symbol_cache(arg->fetch.data); 723 kfree(arg->name); 724 kfree(arg->comm); 725 } 726 727 static void free_trace_probe(struct trace_probe *tp) 728 { 729 int i; 730 731 for (i = 0; i < tp->nr_args; i++) 732 free_probe_arg(&tp->args[i]); 733 734 kfree(tp->call.class->system); 735 kfree(tp->call.name); 736 kfree(tp->symbol); 737 kfree(tp); 738 } 739 740 static struct trace_probe *find_trace_probe(const char *event, 741 const char *group) 742 { 743 struct trace_probe *tp; 744 745 list_for_each_entry(tp, &probe_list, list) 746 if (strcmp(tp->call.name, event) == 0 && 747 strcmp(tp->call.class->system, group) == 0) 748 return tp; 749 return NULL; 750 } 751 752 /* Enable trace_probe - @flag must be TP_FLAG_TRACE or TP_FLAG_PROFILE */ 753 static int enable_trace_probe(struct trace_probe *tp, int flag) 754 { 755 int ret = 0; 756 757 tp->flags |= flag; 758 if (trace_probe_is_enabled(tp) && trace_probe_is_registered(tp) && 759 !trace_probe_has_gone(tp)) { 760 if (trace_probe_is_return(tp)) 761 ret = enable_kretprobe(&tp->rp); 762 else 763 ret = enable_kprobe(&tp->rp.kp); 764 } 765 766 return ret; 767 } 768 769 /* Disable trace_probe - @flag must be TP_FLAG_TRACE or TP_FLAG_PROFILE */ 770 static void disable_trace_probe(struct trace_probe *tp, int flag) 771 { 772 tp->flags &= ~flag; 773 if (!trace_probe_is_enabled(tp) && trace_probe_is_registered(tp)) { 774 if (trace_probe_is_return(tp)) 775 disable_kretprobe(&tp->rp); 776 else 777 disable_kprobe(&tp->rp.kp); 778 } 779 } 780 781 /* Internal register function - just handle k*probes and flags */ 782 static int __register_trace_probe(struct trace_probe *tp) 783 { 784 int i, ret; 785 786 if (trace_probe_is_registered(tp)) 787 return -EINVAL; 788 789 for (i = 0; i < tp->nr_args; i++) 790 update_probe_arg(&tp->args[i]); 791 792 /* Set/clear disabled flag according to tp->flag */ 793 if (trace_probe_is_enabled(tp)) 794 tp->rp.kp.flags &= ~KPROBE_FLAG_DISABLED; 795 else 796 tp->rp.kp.flags |= KPROBE_FLAG_DISABLED; 797 798 if (trace_probe_is_return(tp)) 799 ret = register_kretprobe(&tp->rp); 800 else 801 ret = register_kprobe(&tp->rp.kp); 802 803 if (ret == 0) 804 tp->flags |= TP_FLAG_REGISTERED; 805 else { 806 pr_warning("Could not insert probe at %s+%lu: %d\n", 807 trace_probe_symbol(tp), trace_probe_offset(tp), ret); 808 if (ret == -ENOENT && trace_probe_is_on_module(tp)) { 809 pr_warning("This probe might be able to register after" 810 "target module is loaded. Continue.\n"); 811 ret = 0; 812 } else if (ret == -EILSEQ) { 813 pr_warning("Probing address(0x%p) is not an " 814 "instruction boundary.\n", 815 tp->rp.kp.addr); 816 ret = -EINVAL; 817 } 818 } 819 820 return ret; 821 } 822 823 /* Internal unregister function - just handle k*probes and flags */ 824 static void __unregister_trace_probe(struct trace_probe *tp) 825 { 826 if (trace_probe_is_registered(tp)) { 827 if (trace_probe_is_return(tp)) 828 unregister_kretprobe(&tp->rp); 829 else 830 unregister_kprobe(&tp->rp.kp); 831 tp->flags &= ~TP_FLAG_REGISTERED; 832 /* Cleanup kprobe for reuse */ 833 if (tp->rp.kp.symbol_name) 834 tp->rp.kp.addr = NULL; 835 } 836 } 837 838 /* Unregister a trace_probe and probe_event: call with locking probe_lock */ 839 static void unregister_trace_probe(struct trace_probe *tp) 840 { 841 __unregister_trace_probe(tp); 842 list_del(&tp->list); 843 unregister_probe_event(tp); 844 } 845 846 /* Register a trace_probe and probe_event */ 847 static int register_trace_probe(struct trace_probe *tp) 848 { 849 struct trace_probe *old_tp; 850 int ret; 851 852 mutex_lock(&probe_lock); 853 854 /* Delete old (same name) event if exist */ 855 old_tp = find_trace_probe(tp->call.name, tp->call.class->system); 856 if (old_tp) { 857 unregister_trace_probe(old_tp); 858 free_trace_probe(old_tp); 859 } 860 861 /* Register new event */ 862 ret = register_probe_event(tp); 863 if (ret) { 864 pr_warning("Failed to register probe event(%d)\n", ret); 865 goto end; 866 } 867 868 /* Register k*probe */ 869 ret = __register_trace_probe(tp); 870 if (ret < 0) 871 unregister_probe_event(tp); 872 else 873 list_add_tail(&tp->list, &probe_list); 874 875 end: 876 mutex_unlock(&probe_lock); 877 return ret; 878 } 879 880 /* Module notifier call back, checking event on the module */ 881 static int trace_probe_module_callback(struct notifier_block *nb, 882 unsigned long val, void *data) 883 { 884 struct module *mod = data; 885 struct trace_probe *tp; 886 int ret; 887 888 if (val != MODULE_STATE_COMING) 889 return NOTIFY_DONE; 890 891 /* Update probes on coming module */ 892 mutex_lock(&probe_lock); 893 list_for_each_entry(tp, &probe_list, list) { 894 if (trace_probe_within_module(tp, mod)) { 895 __unregister_trace_probe(tp); 896 ret = __register_trace_probe(tp); 897 if (ret) 898 pr_warning("Failed to re-register probe %s on" 899 "%s: %d\n", 900 tp->call.name, mod->name, ret); 901 } 902 } 903 mutex_unlock(&probe_lock); 904 905 return NOTIFY_DONE; 906 } 907 908 static struct notifier_block trace_probe_module_nb = { 909 .notifier_call = trace_probe_module_callback, 910 .priority = 1 /* Invoked after kprobe module callback */ 911 }; 912 913 /* Split symbol and offset. */ 914 static int split_symbol_offset(char *symbol, unsigned long *offset) 915 { 916 char *tmp; 917 int ret; 918 919 if (!offset) 920 return -EINVAL; 921 922 tmp = strchr(symbol, '+'); 923 if (tmp) { 924 /* skip sign because strict_strtol doesn't accept '+' */ 925 ret = strict_strtoul(tmp + 1, 0, offset); 926 if (ret) 927 return ret; 928 *tmp = '\0'; 929 } else 930 *offset = 0; 931 return 0; 932 } 933 934 #define PARAM_MAX_ARGS 16 935 #define PARAM_MAX_STACK (THREAD_SIZE / sizeof(unsigned long)) 936 937 static int parse_probe_vars(char *arg, const struct fetch_type *t, 938 struct fetch_param *f, int is_return) 939 { 940 int ret = 0; 941 unsigned long param; 942 943 if (strcmp(arg, "retval") == 0) { 944 if (is_return) 945 f->fn = t->fetch[FETCH_MTD_retval]; 946 else 947 ret = -EINVAL; 948 } else if (strncmp(arg, "stack", 5) == 0) { 949 if (arg[5] == '\0') { 950 if (strcmp(t->name, DEFAULT_FETCH_TYPE_STR) == 0) 951 f->fn = fetch_stack_address; 952 else 953 ret = -EINVAL; 954 } else if (isdigit(arg[5])) { 955 ret = strict_strtoul(arg + 5, 10, ¶m); 956 if (ret || param > PARAM_MAX_STACK) 957 ret = -EINVAL; 958 else { 959 f->fn = t->fetch[FETCH_MTD_stack]; 960 f->data = (void *)param; 961 } 962 } else 963 ret = -EINVAL; 964 } else 965 ret = -EINVAL; 966 return ret; 967 } 968 969 /* Recursive argument parser */ 970 static int __parse_probe_arg(char *arg, const struct fetch_type *t, 971 struct fetch_param *f, int is_return) 972 { 973 int ret = 0; 974 unsigned long param; 975 long offset; 976 char *tmp; 977 978 switch (arg[0]) { 979 case '$': 980 ret = parse_probe_vars(arg + 1, t, f, is_return); 981 break; 982 case '%': /* named register */ 983 ret = regs_query_register_offset(arg + 1); 984 if (ret >= 0) { 985 f->fn = t->fetch[FETCH_MTD_reg]; 986 f->data = (void *)(unsigned long)ret; 987 ret = 0; 988 } 989 break; 990 case '@': /* memory or symbol */ 991 if (isdigit(arg[1])) { 992 ret = strict_strtoul(arg + 1, 0, ¶m); 993 if (ret) 994 break; 995 f->fn = t->fetch[FETCH_MTD_memory]; 996 f->data = (void *)param; 997 } else { 998 ret = split_symbol_offset(arg + 1, &offset); 999 if (ret) 1000 break; 1001 f->data = alloc_symbol_cache(arg + 1, offset); 1002 if (f->data) 1003 f->fn = t->fetch[FETCH_MTD_symbol]; 1004 } 1005 break; 1006 case '+': /* deref memory */ 1007 arg++; /* Skip '+', because strict_strtol() rejects it. */ 1008 case '-': 1009 tmp = strchr(arg, '('); 1010 if (!tmp) 1011 break; 1012 *tmp = '\0'; 1013 ret = strict_strtol(arg, 0, &offset); 1014 if (ret) 1015 break; 1016 arg = tmp + 1; 1017 tmp = strrchr(arg, ')'); 1018 if (tmp) { 1019 struct deref_fetch_param *dprm; 1020 const struct fetch_type *t2 = find_fetch_type(NULL); 1021 *tmp = '\0'; 1022 dprm = kzalloc(sizeof(struct deref_fetch_param), 1023 GFP_KERNEL); 1024 if (!dprm) 1025 return -ENOMEM; 1026 dprm->offset = offset; 1027 ret = __parse_probe_arg(arg, t2, &dprm->orig, 1028 is_return); 1029 if (ret) 1030 kfree(dprm); 1031 else { 1032 f->fn = t->fetch[FETCH_MTD_deref]; 1033 f->data = (void *)dprm; 1034 } 1035 } 1036 break; 1037 } 1038 if (!ret && !f->fn) { /* Parsed, but do not find fetch method */ 1039 pr_info("%s type has no corresponding fetch method.\n", 1040 t->name); 1041 ret = -EINVAL; 1042 } 1043 return ret; 1044 } 1045 1046 #define BYTES_TO_BITS(nb) ((BITS_PER_LONG * (nb)) / sizeof(long)) 1047 1048 /* Bitfield type needs to be parsed into a fetch function */ 1049 static int __parse_bitfield_probe_arg(const char *bf, 1050 const struct fetch_type *t, 1051 struct fetch_param *f) 1052 { 1053 struct bitfield_fetch_param *bprm; 1054 unsigned long bw, bo; 1055 char *tail; 1056 1057 if (*bf != 'b') 1058 return 0; 1059 1060 bprm = kzalloc(sizeof(*bprm), GFP_KERNEL); 1061 if (!bprm) 1062 return -ENOMEM; 1063 bprm->orig = *f; 1064 f->fn = t->fetch[FETCH_MTD_bitfield]; 1065 f->data = (void *)bprm; 1066 1067 bw = simple_strtoul(bf + 1, &tail, 0); /* Use simple one */ 1068 if (bw == 0 || *tail != '@') 1069 return -EINVAL; 1070 1071 bf = tail + 1; 1072 bo = simple_strtoul(bf, &tail, 0); 1073 if (tail == bf || *tail != '/') 1074 return -EINVAL; 1075 1076 bprm->hi_shift = BYTES_TO_BITS(t->size) - (bw + bo); 1077 bprm->low_shift = bprm->hi_shift + bo; 1078 return (BYTES_TO_BITS(t->size) < (bw + bo)) ? -EINVAL : 0; 1079 } 1080 1081 /* String length checking wrapper */ 1082 static int parse_probe_arg(char *arg, struct trace_probe *tp, 1083 struct probe_arg *parg, int is_return) 1084 { 1085 const char *t; 1086 int ret; 1087 1088 if (strlen(arg) > MAX_ARGSTR_LEN) { 1089 pr_info("Argument is too long.: %s\n", arg); 1090 return -ENOSPC; 1091 } 1092 parg->comm = kstrdup(arg, GFP_KERNEL); 1093 if (!parg->comm) { 1094 pr_info("Failed to allocate memory for command '%s'.\n", arg); 1095 return -ENOMEM; 1096 } 1097 t = strchr(parg->comm, ':'); 1098 if (t) { 1099 arg[t - parg->comm] = '\0'; 1100 t++; 1101 } 1102 parg->type = find_fetch_type(t); 1103 if (!parg->type) { 1104 pr_info("Unsupported type: %s\n", t); 1105 return -EINVAL; 1106 } 1107 parg->offset = tp->size; 1108 tp->size += parg->type->size; 1109 ret = __parse_probe_arg(arg, parg->type, &parg->fetch, is_return); 1110 if (ret >= 0 && t != NULL) 1111 ret = __parse_bitfield_probe_arg(t, parg->type, &parg->fetch); 1112 if (ret >= 0) { 1113 parg->fetch_size.fn = get_fetch_size_function(parg->type, 1114 parg->fetch.fn); 1115 parg->fetch_size.data = parg->fetch.data; 1116 } 1117 return ret; 1118 } 1119 1120 /* Return 1 if name is reserved or already used by another argument */ 1121 static int conflict_field_name(const char *name, 1122 struct probe_arg *args, int narg) 1123 { 1124 int i; 1125 for (i = 0; i < ARRAY_SIZE(reserved_field_names); i++) 1126 if (strcmp(reserved_field_names[i], name) == 0) 1127 return 1; 1128 for (i = 0; i < narg; i++) 1129 if (strcmp(args[i].name, name) == 0) 1130 return 1; 1131 return 0; 1132 } 1133 1134 static int create_trace_probe(int argc, char **argv) 1135 { 1136 /* 1137 * Argument syntax: 1138 * - Add kprobe: p[:[GRP/]EVENT] [MOD:]KSYM[+OFFS]|KADDR [FETCHARGS] 1139 * - Add kretprobe: r[:[GRP/]EVENT] [MOD:]KSYM[+0] [FETCHARGS] 1140 * Fetch args: 1141 * $retval : fetch return value 1142 * $stack : fetch stack address 1143 * $stackN : fetch Nth of stack (N:0-) 1144 * @ADDR : fetch memory at ADDR (ADDR should be in kernel) 1145 * @SYM[+|-offs] : fetch memory at SYM +|- offs (SYM is a data symbol) 1146 * %REG : fetch register REG 1147 * Dereferencing memory fetch: 1148 * +|-offs(ARG) : fetch memory at ARG +|- offs address. 1149 * Alias name of args: 1150 * NAME=FETCHARG : set NAME as alias of FETCHARG. 1151 * Type of args: 1152 * FETCHARG:TYPE : use TYPE instead of unsigned long. 1153 */ 1154 struct trace_probe *tp; 1155 int i, ret = 0; 1156 int is_return = 0, is_delete = 0; 1157 char *symbol = NULL, *event = NULL, *group = NULL; 1158 char *arg; 1159 unsigned long offset = 0; 1160 void *addr = NULL; 1161 char buf[MAX_EVENT_NAME_LEN]; 1162 1163 /* argc must be >= 1 */ 1164 if (argv[0][0] == 'p') 1165 is_return = 0; 1166 else if (argv[0][0] == 'r') 1167 is_return = 1; 1168 else if (argv[0][0] == '-') 1169 is_delete = 1; 1170 else { 1171 pr_info("Probe definition must be started with 'p', 'r' or" 1172 " '-'.\n"); 1173 return -EINVAL; 1174 } 1175 1176 if (argv[0][1] == ':') { 1177 event = &argv[0][2]; 1178 if (strchr(event, '/')) { 1179 group = event; 1180 event = strchr(group, '/') + 1; 1181 event[-1] = '\0'; 1182 if (strlen(group) == 0) { 1183 pr_info("Group name is not specified\n"); 1184 return -EINVAL; 1185 } 1186 } 1187 if (strlen(event) == 0) { 1188 pr_info("Event name is not specified\n"); 1189 return -EINVAL; 1190 } 1191 } 1192 if (!group) 1193 group = KPROBE_EVENT_SYSTEM; 1194 1195 if (is_delete) { 1196 if (!event) { 1197 pr_info("Delete command needs an event name.\n"); 1198 return -EINVAL; 1199 } 1200 mutex_lock(&probe_lock); 1201 tp = find_trace_probe(event, group); 1202 if (!tp) { 1203 mutex_unlock(&probe_lock); 1204 pr_info("Event %s/%s doesn't exist.\n", group, event); 1205 return -ENOENT; 1206 } 1207 /* delete an event */ 1208 unregister_trace_probe(tp); 1209 free_trace_probe(tp); 1210 mutex_unlock(&probe_lock); 1211 return 0; 1212 } 1213 1214 if (argc < 2) { 1215 pr_info("Probe point is not specified.\n"); 1216 return -EINVAL; 1217 } 1218 if (isdigit(argv[1][0])) { 1219 if (is_return) { 1220 pr_info("Return probe point must be a symbol.\n"); 1221 return -EINVAL; 1222 } 1223 /* an address specified */ 1224 ret = strict_strtoul(&argv[1][0], 0, (unsigned long *)&addr); 1225 if (ret) { 1226 pr_info("Failed to parse address.\n"); 1227 return ret; 1228 } 1229 } else { 1230 /* a symbol specified */ 1231 symbol = argv[1]; 1232 /* TODO: support .init module functions */ 1233 ret = split_symbol_offset(symbol, &offset); 1234 if (ret) { 1235 pr_info("Failed to parse symbol.\n"); 1236 return ret; 1237 } 1238 if (offset && is_return) { 1239 pr_info("Return probe must be used without offset.\n"); 1240 return -EINVAL; 1241 } 1242 } 1243 argc -= 2; argv += 2; 1244 1245 /* setup a probe */ 1246 if (!event) { 1247 /* Make a new event name */ 1248 if (symbol) 1249 snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_%ld", 1250 is_return ? 'r' : 'p', symbol, offset); 1251 else 1252 snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p", 1253 is_return ? 'r' : 'p', addr); 1254 event = buf; 1255 } 1256 tp = alloc_trace_probe(group, event, addr, symbol, offset, argc, 1257 is_return); 1258 if (IS_ERR(tp)) { 1259 pr_info("Failed to allocate trace_probe.(%d)\n", 1260 (int)PTR_ERR(tp)); 1261 return PTR_ERR(tp); 1262 } 1263 1264 /* parse arguments */ 1265 ret = 0; 1266 for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) { 1267 /* Increment count for freeing args in error case */ 1268 tp->nr_args++; 1269 1270 /* Parse argument name */ 1271 arg = strchr(argv[i], '='); 1272 if (arg) { 1273 *arg++ = '\0'; 1274 tp->args[i].name = kstrdup(argv[i], GFP_KERNEL); 1275 } else { 1276 arg = argv[i]; 1277 /* If argument name is omitted, set "argN" */ 1278 snprintf(buf, MAX_EVENT_NAME_LEN, "arg%d", i + 1); 1279 tp->args[i].name = kstrdup(buf, GFP_KERNEL); 1280 } 1281 1282 if (!tp->args[i].name) { 1283 pr_info("Failed to allocate argument[%d] name.\n", i); 1284 ret = -ENOMEM; 1285 goto error; 1286 } 1287 1288 if (!is_good_name(tp->args[i].name)) { 1289 pr_info("Invalid argument[%d] name: %s\n", 1290 i, tp->args[i].name); 1291 ret = -EINVAL; 1292 goto error; 1293 } 1294 1295 if (conflict_field_name(tp->args[i].name, tp->args, i)) { 1296 pr_info("Argument[%d] name '%s' conflicts with " 1297 "another field.\n", i, argv[i]); 1298 ret = -EINVAL; 1299 goto error; 1300 } 1301 1302 /* Parse fetch argument */ 1303 ret = parse_probe_arg(arg, tp, &tp->args[i], is_return); 1304 if (ret) { 1305 pr_info("Parse error at argument[%d]. (%d)\n", i, ret); 1306 goto error; 1307 } 1308 } 1309 1310 ret = register_trace_probe(tp); 1311 if (ret) 1312 goto error; 1313 return 0; 1314 1315 error: 1316 free_trace_probe(tp); 1317 return ret; 1318 } 1319 1320 static void release_all_trace_probes(void) 1321 { 1322 struct trace_probe *tp; 1323 1324 mutex_lock(&probe_lock); 1325 /* TODO: Use batch unregistration */ 1326 while (!list_empty(&probe_list)) { 1327 tp = list_entry(probe_list.next, struct trace_probe, list); 1328 unregister_trace_probe(tp); 1329 free_trace_probe(tp); 1330 } 1331 mutex_unlock(&probe_lock); 1332 } 1333 1334 /* Probes listing interfaces */ 1335 static void *probes_seq_start(struct seq_file *m, loff_t *pos) 1336 { 1337 mutex_lock(&probe_lock); 1338 return seq_list_start(&probe_list, *pos); 1339 } 1340 1341 static void *probes_seq_next(struct seq_file *m, void *v, loff_t *pos) 1342 { 1343 return seq_list_next(v, &probe_list, pos); 1344 } 1345 1346 static void probes_seq_stop(struct seq_file *m, void *v) 1347 { 1348 mutex_unlock(&probe_lock); 1349 } 1350 1351 static int probes_seq_show(struct seq_file *m, void *v) 1352 { 1353 struct trace_probe *tp = v; 1354 int i; 1355 1356 seq_printf(m, "%c", trace_probe_is_return(tp) ? 'r' : 'p'); 1357 seq_printf(m, ":%s/%s", tp->call.class->system, tp->call.name); 1358 1359 if (!tp->symbol) 1360 seq_printf(m, " 0x%p", tp->rp.kp.addr); 1361 else if (tp->rp.kp.offset) 1362 seq_printf(m, " %s+%u", trace_probe_symbol(tp), 1363 tp->rp.kp.offset); 1364 else 1365 seq_printf(m, " %s", trace_probe_symbol(tp)); 1366 1367 for (i = 0; i < tp->nr_args; i++) 1368 seq_printf(m, " %s=%s", tp->args[i].name, tp->args[i].comm); 1369 seq_printf(m, "\n"); 1370 1371 return 0; 1372 } 1373 1374 static const struct seq_operations probes_seq_op = { 1375 .start = probes_seq_start, 1376 .next = probes_seq_next, 1377 .stop = probes_seq_stop, 1378 .show = probes_seq_show 1379 }; 1380 1381 static int probes_open(struct inode *inode, struct file *file) 1382 { 1383 if ((file->f_mode & FMODE_WRITE) && 1384 (file->f_flags & O_TRUNC)) 1385 release_all_trace_probes(); 1386 1387 return seq_open(file, &probes_seq_op); 1388 } 1389 1390 static int command_trace_probe(const char *buf) 1391 { 1392 char **argv; 1393 int argc = 0, ret = 0; 1394 1395 argv = argv_split(GFP_KERNEL, buf, &argc); 1396 if (!argv) 1397 return -ENOMEM; 1398 1399 if (argc) 1400 ret = create_trace_probe(argc, argv); 1401 1402 argv_free(argv); 1403 return ret; 1404 } 1405 1406 #define WRITE_BUFSIZE 4096 1407 1408 static ssize_t probes_write(struct file *file, const char __user *buffer, 1409 size_t count, loff_t *ppos) 1410 { 1411 char *kbuf, *tmp; 1412 int ret; 1413 size_t done; 1414 size_t size; 1415 1416 kbuf = kmalloc(WRITE_BUFSIZE, GFP_KERNEL); 1417 if (!kbuf) 1418 return -ENOMEM; 1419 1420 ret = done = 0; 1421 while (done < count) { 1422 size = count - done; 1423 if (size >= WRITE_BUFSIZE) 1424 size = WRITE_BUFSIZE - 1; 1425 if (copy_from_user(kbuf, buffer + done, size)) { 1426 ret = -EFAULT; 1427 goto out; 1428 } 1429 kbuf[size] = '\0'; 1430 tmp = strchr(kbuf, '\n'); 1431 if (tmp) { 1432 *tmp = '\0'; 1433 size = tmp - kbuf + 1; 1434 } else if (done + size < count) { 1435 pr_warning("Line length is too long: " 1436 "Should be less than %d.", WRITE_BUFSIZE); 1437 ret = -EINVAL; 1438 goto out; 1439 } 1440 done += size; 1441 /* Remove comments */ 1442 tmp = strchr(kbuf, '#'); 1443 if (tmp) 1444 *tmp = '\0'; 1445 1446 ret = command_trace_probe(kbuf); 1447 if (ret) 1448 goto out; 1449 } 1450 ret = done; 1451 out: 1452 kfree(kbuf); 1453 return ret; 1454 } 1455 1456 static const struct file_operations kprobe_events_ops = { 1457 .owner = THIS_MODULE, 1458 .open = probes_open, 1459 .read = seq_read, 1460 .llseek = seq_lseek, 1461 .release = seq_release, 1462 .write = probes_write, 1463 }; 1464 1465 /* Probes profiling interfaces */ 1466 static int probes_profile_seq_show(struct seq_file *m, void *v) 1467 { 1468 struct trace_probe *tp = v; 1469 1470 seq_printf(m, " %-44s %15lu %15lu\n", tp->call.name, tp->nhit, 1471 tp->rp.kp.nmissed); 1472 1473 return 0; 1474 } 1475 1476 static const struct seq_operations profile_seq_op = { 1477 .start = probes_seq_start, 1478 .next = probes_seq_next, 1479 .stop = probes_seq_stop, 1480 .show = probes_profile_seq_show 1481 }; 1482 1483 static int profile_open(struct inode *inode, struct file *file) 1484 { 1485 return seq_open(file, &profile_seq_op); 1486 } 1487 1488 static const struct file_operations kprobe_profile_ops = { 1489 .owner = THIS_MODULE, 1490 .open = profile_open, 1491 .read = seq_read, 1492 .llseek = seq_lseek, 1493 .release = seq_release, 1494 }; 1495 1496 /* Sum up total data length for dynamic arraies (strings) */ 1497 static __kprobes int __get_data_size(struct trace_probe *tp, 1498 struct pt_regs *regs) 1499 { 1500 int i, ret = 0; 1501 u32 len; 1502 1503 for (i = 0; i < tp->nr_args; i++) 1504 if (unlikely(tp->args[i].fetch_size.fn)) { 1505 call_fetch(&tp->args[i].fetch_size, regs, &len); 1506 ret += len; 1507 } 1508 1509 return ret; 1510 } 1511 1512 /* Store the value of each argument */ 1513 static __kprobes void store_trace_args(int ent_size, struct trace_probe *tp, 1514 struct pt_regs *regs, 1515 u8 *data, int maxlen) 1516 { 1517 int i; 1518 u32 end = tp->size; 1519 u32 *dl; /* Data (relative) location */ 1520 1521 for (i = 0; i < tp->nr_args; i++) { 1522 if (unlikely(tp->args[i].fetch_size.fn)) { 1523 /* 1524 * First, we set the relative location and 1525 * maximum data length to *dl 1526 */ 1527 dl = (u32 *)(data + tp->args[i].offset); 1528 *dl = make_data_rloc(maxlen, end - tp->args[i].offset); 1529 /* Then try to fetch string or dynamic array data */ 1530 call_fetch(&tp->args[i].fetch, regs, dl); 1531 /* Reduce maximum length */ 1532 end += get_rloc_len(*dl); 1533 maxlen -= get_rloc_len(*dl); 1534 /* Trick here, convert data_rloc to data_loc */ 1535 *dl = convert_rloc_to_loc(*dl, 1536 ent_size + tp->args[i].offset); 1537 } else 1538 /* Just fetching data normally */ 1539 call_fetch(&tp->args[i].fetch, regs, 1540 data + tp->args[i].offset); 1541 } 1542 } 1543 1544 /* Kprobe handler */ 1545 static __kprobes void kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs) 1546 { 1547 struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp); 1548 struct kprobe_trace_entry_head *entry; 1549 struct ring_buffer_event *event; 1550 struct ring_buffer *buffer; 1551 int size, dsize, pc; 1552 unsigned long irq_flags; 1553 struct ftrace_event_call *call = &tp->call; 1554 1555 tp->nhit++; 1556 1557 local_save_flags(irq_flags); 1558 pc = preempt_count(); 1559 1560 dsize = __get_data_size(tp, regs); 1561 size = sizeof(*entry) + tp->size + dsize; 1562 1563 event = trace_current_buffer_lock_reserve(&buffer, call->event.type, 1564 size, irq_flags, pc); 1565 if (!event) 1566 return; 1567 1568 entry = ring_buffer_event_data(event); 1569 entry->ip = (unsigned long)kp->addr; 1570 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1571 1572 if (!filter_current_check_discard(buffer, call, entry, event)) 1573 trace_nowake_buffer_unlock_commit_regs(buffer, event, 1574 irq_flags, pc, regs); 1575 } 1576 1577 /* Kretprobe handler */ 1578 static __kprobes void kretprobe_trace_func(struct kretprobe_instance *ri, 1579 struct pt_regs *regs) 1580 { 1581 struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp); 1582 struct kretprobe_trace_entry_head *entry; 1583 struct ring_buffer_event *event; 1584 struct ring_buffer *buffer; 1585 int size, pc, dsize; 1586 unsigned long irq_flags; 1587 struct ftrace_event_call *call = &tp->call; 1588 1589 local_save_flags(irq_flags); 1590 pc = preempt_count(); 1591 1592 dsize = __get_data_size(tp, regs); 1593 size = sizeof(*entry) + tp->size + dsize; 1594 1595 event = trace_current_buffer_lock_reserve(&buffer, call->event.type, 1596 size, irq_flags, pc); 1597 if (!event) 1598 return; 1599 1600 entry = ring_buffer_event_data(event); 1601 entry->func = (unsigned long)tp->rp.kp.addr; 1602 entry->ret_ip = (unsigned long)ri->ret_addr; 1603 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1604 1605 if (!filter_current_check_discard(buffer, call, entry, event)) 1606 trace_nowake_buffer_unlock_commit_regs(buffer, event, 1607 irq_flags, pc, regs); 1608 } 1609 1610 /* Event entry printers */ 1611 enum print_line_t 1612 print_kprobe_event(struct trace_iterator *iter, int flags, 1613 struct trace_event *event) 1614 { 1615 struct kprobe_trace_entry_head *field; 1616 struct trace_seq *s = &iter->seq; 1617 struct trace_probe *tp; 1618 u8 *data; 1619 int i; 1620 1621 field = (struct kprobe_trace_entry_head *)iter->ent; 1622 tp = container_of(event, struct trace_probe, call.event); 1623 1624 if (!trace_seq_printf(s, "%s: (", tp->call.name)) 1625 goto partial; 1626 1627 if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET)) 1628 goto partial; 1629 1630 if (!trace_seq_puts(s, ")")) 1631 goto partial; 1632 1633 data = (u8 *)&field[1]; 1634 for (i = 0; i < tp->nr_args; i++) 1635 if (!tp->args[i].type->print(s, tp->args[i].name, 1636 data + tp->args[i].offset, field)) 1637 goto partial; 1638 1639 if (!trace_seq_puts(s, "\n")) 1640 goto partial; 1641 1642 return TRACE_TYPE_HANDLED; 1643 partial: 1644 return TRACE_TYPE_PARTIAL_LINE; 1645 } 1646 1647 enum print_line_t 1648 print_kretprobe_event(struct trace_iterator *iter, int flags, 1649 struct trace_event *event) 1650 { 1651 struct kretprobe_trace_entry_head *field; 1652 struct trace_seq *s = &iter->seq; 1653 struct trace_probe *tp; 1654 u8 *data; 1655 int i; 1656 1657 field = (struct kretprobe_trace_entry_head *)iter->ent; 1658 tp = container_of(event, struct trace_probe, call.event); 1659 1660 if (!trace_seq_printf(s, "%s: (", tp->call.name)) 1661 goto partial; 1662 1663 if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET)) 1664 goto partial; 1665 1666 if (!trace_seq_puts(s, " <- ")) 1667 goto partial; 1668 1669 if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET)) 1670 goto partial; 1671 1672 if (!trace_seq_puts(s, ")")) 1673 goto partial; 1674 1675 data = (u8 *)&field[1]; 1676 for (i = 0; i < tp->nr_args; i++) 1677 if (!tp->args[i].type->print(s, tp->args[i].name, 1678 data + tp->args[i].offset, field)) 1679 goto partial; 1680 1681 if (!trace_seq_puts(s, "\n")) 1682 goto partial; 1683 1684 return TRACE_TYPE_HANDLED; 1685 partial: 1686 return TRACE_TYPE_PARTIAL_LINE; 1687 } 1688 1689 #undef DEFINE_FIELD 1690 #define DEFINE_FIELD(type, item, name, is_signed) \ 1691 do { \ 1692 ret = trace_define_field(event_call, #type, name, \ 1693 offsetof(typeof(field), item), \ 1694 sizeof(field.item), is_signed, \ 1695 FILTER_OTHER); \ 1696 if (ret) \ 1697 return ret; \ 1698 } while (0) 1699 1700 static int kprobe_event_define_fields(struct ftrace_event_call *event_call) 1701 { 1702 int ret, i; 1703 struct kprobe_trace_entry_head field; 1704 struct trace_probe *tp = (struct trace_probe *)event_call->data; 1705 1706 DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0); 1707 /* Set argument names as fields */ 1708 for (i = 0; i < tp->nr_args; i++) { 1709 ret = trace_define_field(event_call, tp->args[i].type->fmttype, 1710 tp->args[i].name, 1711 sizeof(field) + tp->args[i].offset, 1712 tp->args[i].type->size, 1713 tp->args[i].type->is_signed, 1714 FILTER_OTHER); 1715 if (ret) 1716 return ret; 1717 } 1718 return 0; 1719 } 1720 1721 static int kretprobe_event_define_fields(struct ftrace_event_call *event_call) 1722 { 1723 int ret, i; 1724 struct kretprobe_trace_entry_head field; 1725 struct trace_probe *tp = (struct trace_probe *)event_call->data; 1726 1727 DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0); 1728 DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0); 1729 /* Set argument names as fields */ 1730 for (i = 0; i < tp->nr_args; i++) { 1731 ret = trace_define_field(event_call, tp->args[i].type->fmttype, 1732 tp->args[i].name, 1733 sizeof(field) + tp->args[i].offset, 1734 tp->args[i].type->size, 1735 tp->args[i].type->is_signed, 1736 FILTER_OTHER); 1737 if (ret) 1738 return ret; 1739 } 1740 return 0; 1741 } 1742 1743 static int __set_print_fmt(struct trace_probe *tp, char *buf, int len) 1744 { 1745 int i; 1746 int pos = 0; 1747 1748 const char *fmt, *arg; 1749 1750 if (!trace_probe_is_return(tp)) { 1751 fmt = "(%lx)"; 1752 arg = "REC->" FIELD_STRING_IP; 1753 } else { 1754 fmt = "(%lx <- %lx)"; 1755 arg = "REC->" FIELD_STRING_FUNC ", REC->" FIELD_STRING_RETIP; 1756 } 1757 1758 /* When len=0, we just calculate the needed length */ 1759 #define LEN_OR_ZERO (len ? len - pos : 0) 1760 1761 pos += snprintf(buf + pos, LEN_OR_ZERO, "\"%s", fmt); 1762 1763 for (i = 0; i < tp->nr_args; i++) { 1764 pos += snprintf(buf + pos, LEN_OR_ZERO, " %s=%s", 1765 tp->args[i].name, tp->args[i].type->fmt); 1766 } 1767 1768 pos += snprintf(buf + pos, LEN_OR_ZERO, "\", %s", arg); 1769 1770 for (i = 0; i < tp->nr_args; i++) { 1771 if (strcmp(tp->args[i].type->name, "string") == 0) 1772 pos += snprintf(buf + pos, LEN_OR_ZERO, 1773 ", __get_str(%s)", 1774 tp->args[i].name); 1775 else 1776 pos += snprintf(buf + pos, LEN_OR_ZERO, ", REC->%s", 1777 tp->args[i].name); 1778 } 1779 1780 #undef LEN_OR_ZERO 1781 1782 /* return the length of print_fmt */ 1783 return pos; 1784 } 1785 1786 static int set_print_fmt(struct trace_probe *tp) 1787 { 1788 int len; 1789 char *print_fmt; 1790 1791 /* First: called with 0 length to calculate the needed length */ 1792 len = __set_print_fmt(tp, NULL, 0); 1793 print_fmt = kmalloc(len + 1, GFP_KERNEL); 1794 if (!print_fmt) 1795 return -ENOMEM; 1796 1797 /* Second: actually write the @print_fmt */ 1798 __set_print_fmt(tp, print_fmt, len + 1); 1799 tp->call.print_fmt = print_fmt; 1800 1801 return 0; 1802 } 1803 1804 #ifdef CONFIG_PERF_EVENTS 1805 1806 /* Kprobe profile handler */ 1807 static __kprobes void kprobe_perf_func(struct kprobe *kp, 1808 struct pt_regs *regs) 1809 { 1810 struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp); 1811 struct ftrace_event_call *call = &tp->call; 1812 struct kprobe_trace_entry_head *entry; 1813 struct hlist_head *head; 1814 int size, __size, dsize; 1815 int rctx; 1816 1817 dsize = __get_data_size(tp, regs); 1818 __size = sizeof(*entry) + tp->size + dsize; 1819 size = ALIGN(__size + sizeof(u32), sizeof(u64)); 1820 size -= sizeof(u32); 1821 if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE, 1822 "profile buffer not large enough")) 1823 return; 1824 1825 entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx); 1826 if (!entry) 1827 return; 1828 1829 entry->ip = (unsigned long)kp->addr; 1830 memset(&entry[1], 0, dsize); 1831 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1832 1833 head = this_cpu_ptr(call->perf_events); 1834 perf_trace_buf_submit(entry, size, rctx, entry->ip, 1, regs, head); 1835 } 1836 1837 /* Kretprobe profile handler */ 1838 static __kprobes void kretprobe_perf_func(struct kretprobe_instance *ri, 1839 struct pt_regs *regs) 1840 { 1841 struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp); 1842 struct ftrace_event_call *call = &tp->call; 1843 struct kretprobe_trace_entry_head *entry; 1844 struct hlist_head *head; 1845 int size, __size, dsize; 1846 int rctx; 1847 1848 dsize = __get_data_size(tp, regs); 1849 __size = sizeof(*entry) + tp->size + dsize; 1850 size = ALIGN(__size + sizeof(u32), sizeof(u64)); 1851 size -= sizeof(u32); 1852 if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE, 1853 "profile buffer not large enough")) 1854 return; 1855 1856 entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx); 1857 if (!entry) 1858 return; 1859 1860 entry->func = (unsigned long)tp->rp.kp.addr; 1861 entry->ret_ip = (unsigned long)ri->ret_addr; 1862 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1863 1864 head = this_cpu_ptr(call->perf_events); 1865 perf_trace_buf_submit(entry, size, rctx, entry->ret_ip, 1, regs, head); 1866 } 1867 #endif /* CONFIG_PERF_EVENTS */ 1868 1869 static __kprobes 1870 int kprobe_register(struct ftrace_event_call *event, enum trace_reg type) 1871 { 1872 struct trace_probe *tp = (struct trace_probe *)event->data; 1873 1874 switch (type) { 1875 case TRACE_REG_REGISTER: 1876 return enable_trace_probe(tp, TP_FLAG_TRACE); 1877 case TRACE_REG_UNREGISTER: 1878 disable_trace_probe(tp, TP_FLAG_TRACE); 1879 return 0; 1880 1881 #ifdef CONFIG_PERF_EVENTS 1882 case TRACE_REG_PERF_REGISTER: 1883 return enable_trace_probe(tp, TP_FLAG_PROFILE); 1884 case TRACE_REG_PERF_UNREGISTER: 1885 disable_trace_probe(tp, TP_FLAG_PROFILE); 1886 return 0; 1887 #endif 1888 } 1889 return 0; 1890 } 1891 1892 static __kprobes 1893 int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs) 1894 { 1895 struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp); 1896 1897 if (tp->flags & TP_FLAG_TRACE) 1898 kprobe_trace_func(kp, regs); 1899 #ifdef CONFIG_PERF_EVENTS 1900 if (tp->flags & TP_FLAG_PROFILE) 1901 kprobe_perf_func(kp, regs); 1902 #endif 1903 return 0; /* We don't tweek kernel, so just return 0 */ 1904 } 1905 1906 static __kprobes 1907 int kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs) 1908 { 1909 struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp); 1910 1911 if (tp->flags & TP_FLAG_TRACE) 1912 kretprobe_trace_func(ri, regs); 1913 #ifdef CONFIG_PERF_EVENTS 1914 if (tp->flags & TP_FLAG_PROFILE) 1915 kretprobe_perf_func(ri, regs); 1916 #endif 1917 return 0; /* We don't tweek kernel, so just return 0 */ 1918 } 1919 1920 static struct trace_event_functions kretprobe_funcs = { 1921 .trace = print_kretprobe_event 1922 }; 1923 1924 static struct trace_event_functions kprobe_funcs = { 1925 .trace = print_kprobe_event 1926 }; 1927 1928 static int register_probe_event(struct trace_probe *tp) 1929 { 1930 struct ftrace_event_call *call = &tp->call; 1931 int ret; 1932 1933 /* Initialize ftrace_event_call */ 1934 INIT_LIST_HEAD(&call->class->fields); 1935 if (trace_probe_is_return(tp)) { 1936 call->event.funcs = &kretprobe_funcs; 1937 call->class->define_fields = kretprobe_event_define_fields; 1938 } else { 1939 call->event.funcs = &kprobe_funcs; 1940 call->class->define_fields = kprobe_event_define_fields; 1941 } 1942 if (set_print_fmt(tp) < 0) 1943 return -ENOMEM; 1944 ret = register_ftrace_event(&call->event); 1945 if (!ret) { 1946 kfree(call->print_fmt); 1947 return -ENODEV; 1948 } 1949 call->flags = 0; 1950 call->class->reg = kprobe_register; 1951 call->data = tp; 1952 ret = trace_add_event_call(call); 1953 if (ret) { 1954 pr_info("Failed to register kprobe event: %s\n", call->name); 1955 kfree(call->print_fmt); 1956 unregister_ftrace_event(&call->event); 1957 } 1958 return ret; 1959 } 1960 1961 static void unregister_probe_event(struct trace_probe *tp) 1962 { 1963 /* tp->event is unregistered in trace_remove_event_call() */ 1964 trace_remove_event_call(&tp->call); 1965 kfree(tp->call.print_fmt); 1966 } 1967 1968 /* Make a debugfs interface for controlling probe points */ 1969 static __init int init_kprobe_trace(void) 1970 { 1971 struct dentry *d_tracer; 1972 struct dentry *entry; 1973 1974 if (register_module_notifier(&trace_probe_module_nb)) 1975 return -EINVAL; 1976 1977 d_tracer = tracing_init_dentry(); 1978 if (!d_tracer) 1979 return 0; 1980 1981 entry = debugfs_create_file("kprobe_events", 0644, d_tracer, 1982 NULL, &kprobe_events_ops); 1983 1984 /* Event list interface */ 1985 if (!entry) 1986 pr_warning("Could not create debugfs " 1987 "'kprobe_events' entry\n"); 1988 1989 /* Profile interface */ 1990 entry = debugfs_create_file("kprobe_profile", 0444, d_tracer, 1991 NULL, &kprobe_profile_ops); 1992 1993 if (!entry) 1994 pr_warning("Could not create debugfs " 1995 "'kprobe_profile' entry\n"); 1996 return 0; 1997 } 1998 fs_initcall(init_kprobe_trace); 1999 2000 2001 #ifdef CONFIG_FTRACE_STARTUP_TEST 2002 2003 /* 2004 * The "__used" keeps gcc from removing the function symbol 2005 * from the kallsyms table. 2006 */ 2007 static __used int kprobe_trace_selftest_target(int a1, int a2, int a3, 2008 int a4, int a5, int a6) 2009 { 2010 return a1 + a2 + a3 + a4 + a5 + a6; 2011 } 2012 2013 static __init int kprobe_trace_self_tests_init(void) 2014 { 2015 int ret, warn = 0; 2016 int (*target)(int, int, int, int, int, int); 2017 struct trace_probe *tp; 2018 2019 target = kprobe_trace_selftest_target; 2020 2021 pr_info("Testing kprobe tracing: "); 2022 2023 ret = command_trace_probe("p:testprobe kprobe_trace_selftest_target " 2024 "$stack $stack0 +0($stack)"); 2025 if (WARN_ON_ONCE(ret)) { 2026 pr_warning("error on probing function entry.\n"); 2027 warn++; 2028 } else { 2029 /* Enable trace point */ 2030 tp = find_trace_probe("testprobe", KPROBE_EVENT_SYSTEM); 2031 if (WARN_ON_ONCE(tp == NULL)) { 2032 pr_warning("error on getting new probe.\n"); 2033 warn++; 2034 } else 2035 enable_trace_probe(tp, TP_FLAG_TRACE); 2036 } 2037 2038 ret = command_trace_probe("r:testprobe2 kprobe_trace_selftest_target " 2039 "$retval"); 2040 if (WARN_ON_ONCE(ret)) { 2041 pr_warning("error on probing function return.\n"); 2042 warn++; 2043 } else { 2044 /* Enable trace point */ 2045 tp = find_trace_probe("testprobe2", KPROBE_EVENT_SYSTEM); 2046 if (WARN_ON_ONCE(tp == NULL)) { 2047 pr_warning("error on getting new probe.\n"); 2048 warn++; 2049 } else 2050 enable_trace_probe(tp, TP_FLAG_TRACE); 2051 } 2052 2053 if (warn) 2054 goto end; 2055 2056 ret = target(1, 2, 3, 4, 5, 6); 2057 2058 ret = command_trace_probe("-:testprobe"); 2059 if (WARN_ON_ONCE(ret)) { 2060 pr_warning("error on deleting a probe.\n"); 2061 warn++; 2062 } 2063 2064 ret = command_trace_probe("-:testprobe2"); 2065 if (WARN_ON_ONCE(ret)) { 2066 pr_warning("error on deleting a probe.\n"); 2067 warn++; 2068 } 2069 2070 end: 2071 release_all_trace_probes(); 2072 if (warn) 2073 pr_cont("NG: Some tests are failed. Please check them.\n"); 2074 else 2075 pr_cont("OK\n"); 2076 return 0; 2077 } 2078 2079 late_initcall(kprobe_trace_self_tests_init); 2080 2081 #endif 2082