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 int unregister_trace_probe(struct trace_probe *tp) 840 { 841 /* Enabled event can not be unregistered */ 842 if (trace_probe_is_enabled(tp)) 843 return -EBUSY; 844 845 __unregister_trace_probe(tp); 846 list_del(&tp->list); 847 unregister_probe_event(tp); 848 849 return 0; 850 } 851 852 /* Register a trace_probe and probe_event */ 853 static int register_trace_probe(struct trace_probe *tp) 854 { 855 struct trace_probe *old_tp; 856 int ret; 857 858 mutex_lock(&probe_lock); 859 860 /* Delete old (same name) event if exist */ 861 old_tp = find_trace_probe(tp->call.name, tp->call.class->system); 862 if (old_tp) { 863 ret = unregister_trace_probe(old_tp); 864 if (ret < 0) 865 goto end; 866 free_trace_probe(old_tp); 867 } 868 869 /* Register new event */ 870 ret = register_probe_event(tp); 871 if (ret) { 872 pr_warning("Failed to register probe event(%d)\n", ret); 873 goto end; 874 } 875 876 /* Register k*probe */ 877 ret = __register_trace_probe(tp); 878 if (ret < 0) 879 unregister_probe_event(tp); 880 else 881 list_add_tail(&tp->list, &probe_list); 882 883 end: 884 mutex_unlock(&probe_lock); 885 return ret; 886 } 887 888 /* Module notifier call back, checking event on the module */ 889 static int trace_probe_module_callback(struct notifier_block *nb, 890 unsigned long val, void *data) 891 { 892 struct module *mod = data; 893 struct trace_probe *tp; 894 int ret; 895 896 if (val != MODULE_STATE_COMING) 897 return NOTIFY_DONE; 898 899 /* Update probes on coming module */ 900 mutex_lock(&probe_lock); 901 list_for_each_entry(tp, &probe_list, list) { 902 if (trace_probe_within_module(tp, mod)) { 903 /* Don't need to check busy - this should have gone. */ 904 __unregister_trace_probe(tp); 905 ret = __register_trace_probe(tp); 906 if (ret) 907 pr_warning("Failed to re-register probe %s on" 908 "%s: %d\n", 909 tp->call.name, mod->name, ret); 910 } 911 } 912 mutex_unlock(&probe_lock); 913 914 return NOTIFY_DONE; 915 } 916 917 static struct notifier_block trace_probe_module_nb = { 918 .notifier_call = trace_probe_module_callback, 919 .priority = 1 /* Invoked after kprobe module callback */ 920 }; 921 922 /* Split symbol and offset. */ 923 static int split_symbol_offset(char *symbol, unsigned long *offset) 924 { 925 char *tmp; 926 int ret; 927 928 if (!offset) 929 return -EINVAL; 930 931 tmp = strchr(symbol, '+'); 932 if (tmp) { 933 /* skip sign because strict_strtol doesn't accept '+' */ 934 ret = strict_strtoul(tmp + 1, 0, offset); 935 if (ret) 936 return ret; 937 *tmp = '\0'; 938 } else 939 *offset = 0; 940 return 0; 941 } 942 943 #define PARAM_MAX_ARGS 16 944 #define PARAM_MAX_STACK (THREAD_SIZE / sizeof(unsigned long)) 945 946 static int parse_probe_vars(char *arg, const struct fetch_type *t, 947 struct fetch_param *f, int is_return) 948 { 949 int ret = 0; 950 unsigned long param; 951 952 if (strcmp(arg, "retval") == 0) { 953 if (is_return) 954 f->fn = t->fetch[FETCH_MTD_retval]; 955 else 956 ret = -EINVAL; 957 } else if (strncmp(arg, "stack", 5) == 0) { 958 if (arg[5] == '\0') { 959 if (strcmp(t->name, DEFAULT_FETCH_TYPE_STR) == 0) 960 f->fn = fetch_stack_address; 961 else 962 ret = -EINVAL; 963 } else if (isdigit(arg[5])) { 964 ret = strict_strtoul(arg + 5, 10, ¶m); 965 if (ret || param > PARAM_MAX_STACK) 966 ret = -EINVAL; 967 else { 968 f->fn = t->fetch[FETCH_MTD_stack]; 969 f->data = (void *)param; 970 } 971 } else 972 ret = -EINVAL; 973 } else 974 ret = -EINVAL; 975 return ret; 976 } 977 978 /* Recursive argument parser */ 979 static int __parse_probe_arg(char *arg, const struct fetch_type *t, 980 struct fetch_param *f, int is_return) 981 { 982 int ret = 0; 983 unsigned long param; 984 long offset; 985 char *tmp; 986 987 switch (arg[0]) { 988 case '$': 989 ret = parse_probe_vars(arg + 1, t, f, is_return); 990 break; 991 case '%': /* named register */ 992 ret = regs_query_register_offset(arg + 1); 993 if (ret >= 0) { 994 f->fn = t->fetch[FETCH_MTD_reg]; 995 f->data = (void *)(unsigned long)ret; 996 ret = 0; 997 } 998 break; 999 case '@': /* memory or symbol */ 1000 if (isdigit(arg[1])) { 1001 ret = strict_strtoul(arg + 1, 0, ¶m); 1002 if (ret) 1003 break; 1004 f->fn = t->fetch[FETCH_MTD_memory]; 1005 f->data = (void *)param; 1006 } else { 1007 ret = split_symbol_offset(arg + 1, &offset); 1008 if (ret) 1009 break; 1010 f->data = alloc_symbol_cache(arg + 1, offset); 1011 if (f->data) 1012 f->fn = t->fetch[FETCH_MTD_symbol]; 1013 } 1014 break; 1015 case '+': /* deref memory */ 1016 arg++; /* Skip '+', because strict_strtol() rejects it. */ 1017 case '-': 1018 tmp = strchr(arg, '('); 1019 if (!tmp) 1020 break; 1021 *tmp = '\0'; 1022 ret = strict_strtol(arg, 0, &offset); 1023 if (ret) 1024 break; 1025 arg = tmp + 1; 1026 tmp = strrchr(arg, ')'); 1027 if (tmp) { 1028 struct deref_fetch_param *dprm; 1029 const struct fetch_type *t2 = find_fetch_type(NULL); 1030 *tmp = '\0'; 1031 dprm = kzalloc(sizeof(struct deref_fetch_param), 1032 GFP_KERNEL); 1033 if (!dprm) 1034 return -ENOMEM; 1035 dprm->offset = offset; 1036 ret = __parse_probe_arg(arg, t2, &dprm->orig, 1037 is_return); 1038 if (ret) 1039 kfree(dprm); 1040 else { 1041 f->fn = t->fetch[FETCH_MTD_deref]; 1042 f->data = (void *)dprm; 1043 } 1044 } 1045 break; 1046 } 1047 if (!ret && !f->fn) { /* Parsed, but do not find fetch method */ 1048 pr_info("%s type has no corresponding fetch method.\n", 1049 t->name); 1050 ret = -EINVAL; 1051 } 1052 return ret; 1053 } 1054 1055 #define BYTES_TO_BITS(nb) ((BITS_PER_LONG * (nb)) / sizeof(long)) 1056 1057 /* Bitfield type needs to be parsed into a fetch function */ 1058 static int __parse_bitfield_probe_arg(const char *bf, 1059 const struct fetch_type *t, 1060 struct fetch_param *f) 1061 { 1062 struct bitfield_fetch_param *bprm; 1063 unsigned long bw, bo; 1064 char *tail; 1065 1066 if (*bf != 'b') 1067 return 0; 1068 1069 bprm = kzalloc(sizeof(*bprm), GFP_KERNEL); 1070 if (!bprm) 1071 return -ENOMEM; 1072 bprm->orig = *f; 1073 f->fn = t->fetch[FETCH_MTD_bitfield]; 1074 f->data = (void *)bprm; 1075 1076 bw = simple_strtoul(bf + 1, &tail, 0); /* Use simple one */ 1077 if (bw == 0 || *tail != '@') 1078 return -EINVAL; 1079 1080 bf = tail + 1; 1081 bo = simple_strtoul(bf, &tail, 0); 1082 if (tail == bf || *tail != '/') 1083 return -EINVAL; 1084 1085 bprm->hi_shift = BYTES_TO_BITS(t->size) - (bw + bo); 1086 bprm->low_shift = bprm->hi_shift + bo; 1087 return (BYTES_TO_BITS(t->size) < (bw + bo)) ? -EINVAL : 0; 1088 } 1089 1090 /* String length checking wrapper */ 1091 static int parse_probe_arg(char *arg, struct trace_probe *tp, 1092 struct probe_arg *parg, int is_return) 1093 { 1094 const char *t; 1095 int ret; 1096 1097 if (strlen(arg) > MAX_ARGSTR_LEN) { 1098 pr_info("Argument is too long.: %s\n", arg); 1099 return -ENOSPC; 1100 } 1101 parg->comm = kstrdup(arg, GFP_KERNEL); 1102 if (!parg->comm) { 1103 pr_info("Failed to allocate memory for command '%s'.\n", arg); 1104 return -ENOMEM; 1105 } 1106 t = strchr(parg->comm, ':'); 1107 if (t) { 1108 arg[t - parg->comm] = '\0'; 1109 t++; 1110 } 1111 parg->type = find_fetch_type(t); 1112 if (!parg->type) { 1113 pr_info("Unsupported type: %s\n", t); 1114 return -EINVAL; 1115 } 1116 parg->offset = tp->size; 1117 tp->size += parg->type->size; 1118 ret = __parse_probe_arg(arg, parg->type, &parg->fetch, is_return); 1119 if (ret >= 0 && t != NULL) 1120 ret = __parse_bitfield_probe_arg(t, parg->type, &parg->fetch); 1121 if (ret >= 0) { 1122 parg->fetch_size.fn = get_fetch_size_function(parg->type, 1123 parg->fetch.fn); 1124 parg->fetch_size.data = parg->fetch.data; 1125 } 1126 return ret; 1127 } 1128 1129 /* Return 1 if name is reserved or already used by another argument */ 1130 static int conflict_field_name(const char *name, 1131 struct probe_arg *args, int narg) 1132 { 1133 int i; 1134 for (i = 0; i < ARRAY_SIZE(reserved_field_names); i++) 1135 if (strcmp(reserved_field_names[i], name) == 0) 1136 return 1; 1137 for (i = 0; i < narg; i++) 1138 if (strcmp(args[i].name, name) == 0) 1139 return 1; 1140 return 0; 1141 } 1142 1143 static int create_trace_probe(int argc, char **argv) 1144 { 1145 /* 1146 * Argument syntax: 1147 * - Add kprobe: p[:[GRP/]EVENT] [MOD:]KSYM[+OFFS]|KADDR [FETCHARGS] 1148 * - Add kretprobe: r[:[GRP/]EVENT] [MOD:]KSYM[+0] [FETCHARGS] 1149 * Fetch args: 1150 * $retval : fetch return value 1151 * $stack : fetch stack address 1152 * $stackN : fetch Nth of stack (N:0-) 1153 * @ADDR : fetch memory at ADDR (ADDR should be in kernel) 1154 * @SYM[+|-offs] : fetch memory at SYM +|- offs (SYM is a data symbol) 1155 * %REG : fetch register REG 1156 * Dereferencing memory fetch: 1157 * +|-offs(ARG) : fetch memory at ARG +|- offs address. 1158 * Alias name of args: 1159 * NAME=FETCHARG : set NAME as alias of FETCHARG. 1160 * Type of args: 1161 * FETCHARG:TYPE : use TYPE instead of unsigned long. 1162 */ 1163 struct trace_probe *tp; 1164 int i, ret = 0; 1165 int is_return = 0, is_delete = 0; 1166 char *symbol = NULL, *event = NULL, *group = NULL; 1167 char *arg; 1168 unsigned long offset = 0; 1169 void *addr = NULL; 1170 char buf[MAX_EVENT_NAME_LEN]; 1171 1172 /* argc must be >= 1 */ 1173 if (argv[0][0] == 'p') 1174 is_return = 0; 1175 else if (argv[0][0] == 'r') 1176 is_return = 1; 1177 else if (argv[0][0] == '-') 1178 is_delete = 1; 1179 else { 1180 pr_info("Probe definition must be started with 'p', 'r' or" 1181 " '-'.\n"); 1182 return -EINVAL; 1183 } 1184 1185 if (argv[0][1] == ':') { 1186 event = &argv[0][2]; 1187 if (strchr(event, '/')) { 1188 group = event; 1189 event = strchr(group, '/') + 1; 1190 event[-1] = '\0'; 1191 if (strlen(group) == 0) { 1192 pr_info("Group name is not specified\n"); 1193 return -EINVAL; 1194 } 1195 } 1196 if (strlen(event) == 0) { 1197 pr_info("Event name is not specified\n"); 1198 return -EINVAL; 1199 } 1200 } 1201 if (!group) 1202 group = KPROBE_EVENT_SYSTEM; 1203 1204 if (is_delete) { 1205 if (!event) { 1206 pr_info("Delete command needs an event name.\n"); 1207 return -EINVAL; 1208 } 1209 mutex_lock(&probe_lock); 1210 tp = find_trace_probe(event, group); 1211 if (!tp) { 1212 mutex_unlock(&probe_lock); 1213 pr_info("Event %s/%s doesn't exist.\n", group, event); 1214 return -ENOENT; 1215 } 1216 /* delete an event */ 1217 ret = unregister_trace_probe(tp); 1218 if (ret == 0) 1219 free_trace_probe(tp); 1220 mutex_unlock(&probe_lock); 1221 return ret; 1222 } 1223 1224 if (argc < 2) { 1225 pr_info("Probe point is not specified.\n"); 1226 return -EINVAL; 1227 } 1228 if (isdigit(argv[1][0])) { 1229 if (is_return) { 1230 pr_info("Return probe point must be a symbol.\n"); 1231 return -EINVAL; 1232 } 1233 /* an address specified */ 1234 ret = strict_strtoul(&argv[1][0], 0, (unsigned long *)&addr); 1235 if (ret) { 1236 pr_info("Failed to parse address.\n"); 1237 return ret; 1238 } 1239 } else { 1240 /* a symbol specified */ 1241 symbol = argv[1]; 1242 /* TODO: support .init module functions */ 1243 ret = split_symbol_offset(symbol, &offset); 1244 if (ret) { 1245 pr_info("Failed to parse symbol.\n"); 1246 return ret; 1247 } 1248 if (offset && is_return) { 1249 pr_info("Return probe must be used without offset.\n"); 1250 return -EINVAL; 1251 } 1252 } 1253 argc -= 2; argv += 2; 1254 1255 /* setup a probe */ 1256 if (!event) { 1257 /* Make a new event name */ 1258 if (symbol) 1259 snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_%ld", 1260 is_return ? 'r' : 'p', symbol, offset); 1261 else 1262 snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p", 1263 is_return ? 'r' : 'p', addr); 1264 event = buf; 1265 } 1266 tp = alloc_trace_probe(group, event, addr, symbol, offset, argc, 1267 is_return); 1268 if (IS_ERR(tp)) { 1269 pr_info("Failed to allocate trace_probe.(%d)\n", 1270 (int)PTR_ERR(tp)); 1271 return PTR_ERR(tp); 1272 } 1273 1274 /* parse arguments */ 1275 ret = 0; 1276 for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) { 1277 /* Increment count for freeing args in error case */ 1278 tp->nr_args++; 1279 1280 /* Parse argument name */ 1281 arg = strchr(argv[i], '='); 1282 if (arg) { 1283 *arg++ = '\0'; 1284 tp->args[i].name = kstrdup(argv[i], GFP_KERNEL); 1285 } else { 1286 arg = argv[i]; 1287 /* If argument name is omitted, set "argN" */ 1288 snprintf(buf, MAX_EVENT_NAME_LEN, "arg%d", i + 1); 1289 tp->args[i].name = kstrdup(buf, GFP_KERNEL); 1290 } 1291 1292 if (!tp->args[i].name) { 1293 pr_info("Failed to allocate argument[%d] name.\n", i); 1294 ret = -ENOMEM; 1295 goto error; 1296 } 1297 1298 if (!is_good_name(tp->args[i].name)) { 1299 pr_info("Invalid argument[%d] name: %s\n", 1300 i, tp->args[i].name); 1301 ret = -EINVAL; 1302 goto error; 1303 } 1304 1305 if (conflict_field_name(tp->args[i].name, tp->args, i)) { 1306 pr_info("Argument[%d] name '%s' conflicts with " 1307 "another field.\n", i, argv[i]); 1308 ret = -EINVAL; 1309 goto error; 1310 } 1311 1312 /* Parse fetch argument */ 1313 ret = parse_probe_arg(arg, tp, &tp->args[i], is_return); 1314 if (ret) { 1315 pr_info("Parse error at argument[%d]. (%d)\n", i, ret); 1316 goto error; 1317 } 1318 } 1319 1320 ret = register_trace_probe(tp); 1321 if (ret) 1322 goto error; 1323 return 0; 1324 1325 error: 1326 free_trace_probe(tp); 1327 return ret; 1328 } 1329 1330 static int release_all_trace_probes(void) 1331 { 1332 struct trace_probe *tp; 1333 int ret = 0; 1334 1335 mutex_lock(&probe_lock); 1336 /* Ensure no probe is in use. */ 1337 list_for_each_entry(tp, &probe_list, list) 1338 if (trace_probe_is_enabled(tp)) { 1339 ret = -EBUSY; 1340 goto end; 1341 } 1342 /* TODO: Use batch unregistration */ 1343 while (!list_empty(&probe_list)) { 1344 tp = list_entry(probe_list.next, struct trace_probe, list); 1345 unregister_trace_probe(tp); 1346 free_trace_probe(tp); 1347 } 1348 1349 end: 1350 mutex_unlock(&probe_lock); 1351 1352 return ret; 1353 } 1354 1355 /* Probes listing interfaces */ 1356 static void *probes_seq_start(struct seq_file *m, loff_t *pos) 1357 { 1358 mutex_lock(&probe_lock); 1359 return seq_list_start(&probe_list, *pos); 1360 } 1361 1362 static void *probes_seq_next(struct seq_file *m, void *v, loff_t *pos) 1363 { 1364 return seq_list_next(v, &probe_list, pos); 1365 } 1366 1367 static void probes_seq_stop(struct seq_file *m, void *v) 1368 { 1369 mutex_unlock(&probe_lock); 1370 } 1371 1372 static int probes_seq_show(struct seq_file *m, void *v) 1373 { 1374 struct trace_probe *tp = v; 1375 int i; 1376 1377 seq_printf(m, "%c", trace_probe_is_return(tp) ? 'r' : 'p'); 1378 seq_printf(m, ":%s/%s", tp->call.class->system, tp->call.name); 1379 1380 if (!tp->symbol) 1381 seq_printf(m, " 0x%p", tp->rp.kp.addr); 1382 else if (tp->rp.kp.offset) 1383 seq_printf(m, " %s+%u", trace_probe_symbol(tp), 1384 tp->rp.kp.offset); 1385 else 1386 seq_printf(m, " %s", trace_probe_symbol(tp)); 1387 1388 for (i = 0; i < tp->nr_args; i++) 1389 seq_printf(m, " %s=%s", tp->args[i].name, tp->args[i].comm); 1390 seq_printf(m, "\n"); 1391 1392 return 0; 1393 } 1394 1395 static const struct seq_operations probes_seq_op = { 1396 .start = probes_seq_start, 1397 .next = probes_seq_next, 1398 .stop = probes_seq_stop, 1399 .show = probes_seq_show 1400 }; 1401 1402 static int probes_open(struct inode *inode, struct file *file) 1403 { 1404 int ret; 1405 1406 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) { 1407 ret = release_all_trace_probes(); 1408 if (ret < 0) 1409 return ret; 1410 } 1411 1412 return seq_open(file, &probes_seq_op); 1413 } 1414 1415 static int command_trace_probe(const char *buf) 1416 { 1417 char **argv; 1418 int argc = 0, ret = 0; 1419 1420 argv = argv_split(GFP_KERNEL, buf, &argc); 1421 if (!argv) 1422 return -ENOMEM; 1423 1424 if (argc) 1425 ret = create_trace_probe(argc, argv); 1426 1427 argv_free(argv); 1428 return ret; 1429 } 1430 1431 #define WRITE_BUFSIZE 4096 1432 1433 static ssize_t probes_write(struct file *file, const char __user *buffer, 1434 size_t count, loff_t *ppos) 1435 { 1436 char *kbuf, *tmp; 1437 int ret; 1438 size_t done; 1439 size_t size; 1440 1441 kbuf = kmalloc(WRITE_BUFSIZE, GFP_KERNEL); 1442 if (!kbuf) 1443 return -ENOMEM; 1444 1445 ret = done = 0; 1446 while (done < count) { 1447 size = count - done; 1448 if (size >= WRITE_BUFSIZE) 1449 size = WRITE_BUFSIZE - 1; 1450 if (copy_from_user(kbuf, buffer + done, size)) { 1451 ret = -EFAULT; 1452 goto out; 1453 } 1454 kbuf[size] = '\0'; 1455 tmp = strchr(kbuf, '\n'); 1456 if (tmp) { 1457 *tmp = '\0'; 1458 size = tmp - kbuf + 1; 1459 } else if (done + size < count) { 1460 pr_warning("Line length is too long: " 1461 "Should be less than %d.", WRITE_BUFSIZE); 1462 ret = -EINVAL; 1463 goto out; 1464 } 1465 done += size; 1466 /* Remove comments */ 1467 tmp = strchr(kbuf, '#'); 1468 if (tmp) 1469 *tmp = '\0'; 1470 1471 ret = command_trace_probe(kbuf); 1472 if (ret) 1473 goto out; 1474 } 1475 ret = done; 1476 out: 1477 kfree(kbuf); 1478 return ret; 1479 } 1480 1481 static const struct file_operations kprobe_events_ops = { 1482 .owner = THIS_MODULE, 1483 .open = probes_open, 1484 .read = seq_read, 1485 .llseek = seq_lseek, 1486 .release = seq_release, 1487 .write = probes_write, 1488 }; 1489 1490 /* Probes profiling interfaces */ 1491 static int probes_profile_seq_show(struct seq_file *m, void *v) 1492 { 1493 struct trace_probe *tp = v; 1494 1495 seq_printf(m, " %-44s %15lu %15lu\n", tp->call.name, tp->nhit, 1496 tp->rp.kp.nmissed); 1497 1498 return 0; 1499 } 1500 1501 static const struct seq_operations profile_seq_op = { 1502 .start = probes_seq_start, 1503 .next = probes_seq_next, 1504 .stop = probes_seq_stop, 1505 .show = probes_profile_seq_show 1506 }; 1507 1508 static int profile_open(struct inode *inode, struct file *file) 1509 { 1510 return seq_open(file, &profile_seq_op); 1511 } 1512 1513 static const struct file_operations kprobe_profile_ops = { 1514 .owner = THIS_MODULE, 1515 .open = profile_open, 1516 .read = seq_read, 1517 .llseek = seq_lseek, 1518 .release = seq_release, 1519 }; 1520 1521 /* Sum up total data length for dynamic arraies (strings) */ 1522 static __kprobes int __get_data_size(struct trace_probe *tp, 1523 struct pt_regs *regs) 1524 { 1525 int i, ret = 0; 1526 u32 len; 1527 1528 for (i = 0; i < tp->nr_args; i++) 1529 if (unlikely(tp->args[i].fetch_size.fn)) { 1530 call_fetch(&tp->args[i].fetch_size, regs, &len); 1531 ret += len; 1532 } 1533 1534 return ret; 1535 } 1536 1537 /* Store the value of each argument */ 1538 static __kprobes void store_trace_args(int ent_size, struct trace_probe *tp, 1539 struct pt_regs *regs, 1540 u8 *data, int maxlen) 1541 { 1542 int i; 1543 u32 end = tp->size; 1544 u32 *dl; /* Data (relative) location */ 1545 1546 for (i = 0; i < tp->nr_args; i++) { 1547 if (unlikely(tp->args[i].fetch_size.fn)) { 1548 /* 1549 * First, we set the relative location and 1550 * maximum data length to *dl 1551 */ 1552 dl = (u32 *)(data + tp->args[i].offset); 1553 *dl = make_data_rloc(maxlen, end - tp->args[i].offset); 1554 /* Then try to fetch string or dynamic array data */ 1555 call_fetch(&tp->args[i].fetch, regs, dl); 1556 /* Reduce maximum length */ 1557 end += get_rloc_len(*dl); 1558 maxlen -= get_rloc_len(*dl); 1559 /* Trick here, convert data_rloc to data_loc */ 1560 *dl = convert_rloc_to_loc(*dl, 1561 ent_size + tp->args[i].offset); 1562 } else 1563 /* Just fetching data normally */ 1564 call_fetch(&tp->args[i].fetch, regs, 1565 data + tp->args[i].offset); 1566 } 1567 } 1568 1569 /* Kprobe handler */ 1570 static __kprobes void kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs) 1571 { 1572 struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp); 1573 struct kprobe_trace_entry_head *entry; 1574 struct ring_buffer_event *event; 1575 struct ring_buffer *buffer; 1576 int size, dsize, pc; 1577 unsigned long irq_flags; 1578 struct ftrace_event_call *call = &tp->call; 1579 1580 tp->nhit++; 1581 1582 local_save_flags(irq_flags); 1583 pc = preempt_count(); 1584 1585 dsize = __get_data_size(tp, regs); 1586 size = sizeof(*entry) + tp->size + dsize; 1587 1588 event = trace_current_buffer_lock_reserve(&buffer, call->event.type, 1589 size, irq_flags, pc); 1590 if (!event) 1591 return; 1592 1593 entry = ring_buffer_event_data(event); 1594 entry->ip = (unsigned long)kp->addr; 1595 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1596 1597 if (!filter_current_check_discard(buffer, call, entry, event)) 1598 trace_nowake_buffer_unlock_commit_regs(buffer, event, 1599 irq_flags, pc, regs); 1600 } 1601 1602 /* Kretprobe handler */ 1603 static __kprobes void kretprobe_trace_func(struct kretprobe_instance *ri, 1604 struct pt_regs *regs) 1605 { 1606 struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp); 1607 struct kretprobe_trace_entry_head *entry; 1608 struct ring_buffer_event *event; 1609 struct ring_buffer *buffer; 1610 int size, pc, dsize; 1611 unsigned long irq_flags; 1612 struct ftrace_event_call *call = &tp->call; 1613 1614 local_save_flags(irq_flags); 1615 pc = preempt_count(); 1616 1617 dsize = __get_data_size(tp, regs); 1618 size = sizeof(*entry) + tp->size + dsize; 1619 1620 event = trace_current_buffer_lock_reserve(&buffer, call->event.type, 1621 size, irq_flags, pc); 1622 if (!event) 1623 return; 1624 1625 entry = ring_buffer_event_data(event); 1626 entry->func = (unsigned long)tp->rp.kp.addr; 1627 entry->ret_ip = (unsigned long)ri->ret_addr; 1628 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1629 1630 if (!filter_current_check_discard(buffer, call, entry, event)) 1631 trace_nowake_buffer_unlock_commit_regs(buffer, event, 1632 irq_flags, pc, regs); 1633 } 1634 1635 /* Event entry printers */ 1636 enum print_line_t 1637 print_kprobe_event(struct trace_iterator *iter, int flags, 1638 struct trace_event *event) 1639 { 1640 struct kprobe_trace_entry_head *field; 1641 struct trace_seq *s = &iter->seq; 1642 struct trace_probe *tp; 1643 u8 *data; 1644 int i; 1645 1646 field = (struct kprobe_trace_entry_head *)iter->ent; 1647 tp = container_of(event, struct trace_probe, call.event); 1648 1649 if (!trace_seq_printf(s, "%s: (", tp->call.name)) 1650 goto partial; 1651 1652 if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET)) 1653 goto partial; 1654 1655 if (!trace_seq_puts(s, ")")) 1656 goto partial; 1657 1658 data = (u8 *)&field[1]; 1659 for (i = 0; i < tp->nr_args; i++) 1660 if (!tp->args[i].type->print(s, tp->args[i].name, 1661 data + tp->args[i].offset, field)) 1662 goto partial; 1663 1664 if (!trace_seq_puts(s, "\n")) 1665 goto partial; 1666 1667 return TRACE_TYPE_HANDLED; 1668 partial: 1669 return TRACE_TYPE_PARTIAL_LINE; 1670 } 1671 1672 enum print_line_t 1673 print_kretprobe_event(struct trace_iterator *iter, int flags, 1674 struct trace_event *event) 1675 { 1676 struct kretprobe_trace_entry_head *field; 1677 struct trace_seq *s = &iter->seq; 1678 struct trace_probe *tp; 1679 u8 *data; 1680 int i; 1681 1682 field = (struct kretprobe_trace_entry_head *)iter->ent; 1683 tp = container_of(event, struct trace_probe, call.event); 1684 1685 if (!trace_seq_printf(s, "%s: (", tp->call.name)) 1686 goto partial; 1687 1688 if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET)) 1689 goto partial; 1690 1691 if (!trace_seq_puts(s, " <- ")) 1692 goto partial; 1693 1694 if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET)) 1695 goto partial; 1696 1697 if (!trace_seq_puts(s, ")")) 1698 goto partial; 1699 1700 data = (u8 *)&field[1]; 1701 for (i = 0; i < tp->nr_args; i++) 1702 if (!tp->args[i].type->print(s, tp->args[i].name, 1703 data + tp->args[i].offset, field)) 1704 goto partial; 1705 1706 if (!trace_seq_puts(s, "\n")) 1707 goto partial; 1708 1709 return TRACE_TYPE_HANDLED; 1710 partial: 1711 return TRACE_TYPE_PARTIAL_LINE; 1712 } 1713 1714 #undef DEFINE_FIELD 1715 #define DEFINE_FIELD(type, item, name, is_signed) \ 1716 do { \ 1717 ret = trace_define_field(event_call, #type, name, \ 1718 offsetof(typeof(field), item), \ 1719 sizeof(field.item), is_signed, \ 1720 FILTER_OTHER); \ 1721 if (ret) \ 1722 return ret; \ 1723 } while (0) 1724 1725 static int kprobe_event_define_fields(struct ftrace_event_call *event_call) 1726 { 1727 int ret, i; 1728 struct kprobe_trace_entry_head field; 1729 struct trace_probe *tp = (struct trace_probe *)event_call->data; 1730 1731 DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0); 1732 /* Set argument names as fields */ 1733 for (i = 0; i < tp->nr_args; i++) { 1734 ret = trace_define_field(event_call, tp->args[i].type->fmttype, 1735 tp->args[i].name, 1736 sizeof(field) + tp->args[i].offset, 1737 tp->args[i].type->size, 1738 tp->args[i].type->is_signed, 1739 FILTER_OTHER); 1740 if (ret) 1741 return ret; 1742 } 1743 return 0; 1744 } 1745 1746 static int kretprobe_event_define_fields(struct ftrace_event_call *event_call) 1747 { 1748 int ret, i; 1749 struct kretprobe_trace_entry_head field; 1750 struct trace_probe *tp = (struct trace_probe *)event_call->data; 1751 1752 DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0); 1753 DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0); 1754 /* Set argument names as fields */ 1755 for (i = 0; i < tp->nr_args; i++) { 1756 ret = trace_define_field(event_call, tp->args[i].type->fmttype, 1757 tp->args[i].name, 1758 sizeof(field) + tp->args[i].offset, 1759 tp->args[i].type->size, 1760 tp->args[i].type->is_signed, 1761 FILTER_OTHER); 1762 if (ret) 1763 return ret; 1764 } 1765 return 0; 1766 } 1767 1768 static int __set_print_fmt(struct trace_probe *tp, char *buf, int len) 1769 { 1770 int i; 1771 int pos = 0; 1772 1773 const char *fmt, *arg; 1774 1775 if (!trace_probe_is_return(tp)) { 1776 fmt = "(%lx)"; 1777 arg = "REC->" FIELD_STRING_IP; 1778 } else { 1779 fmt = "(%lx <- %lx)"; 1780 arg = "REC->" FIELD_STRING_FUNC ", REC->" FIELD_STRING_RETIP; 1781 } 1782 1783 /* When len=0, we just calculate the needed length */ 1784 #define LEN_OR_ZERO (len ? len - pos : 0) 1785 1786 pos += snprintf(buf + pos, LEN_OR_ZERO, "\"%s", fmt); 1787 1788 for (i = 0; i < tp->nr_args; i++) { 1789 pos += snprintf(buf + pos, LEN_OR_ZERO, " %s=%s", 1790 tp->args[i].name, tp->args[i].type->fmt); 1791 } 1792 1793 pos += snprintf(buf + pos, LEN_OR_ZERO, "\", %s", arg); 1794 1795 for (i = 0; i < tp->nr_args; i++) { 1796 if (strcmp(tp->args[i].type->name, "string") == 0) 1797 pos += snprintf(buf + pos, LEN_OR_ZERO, 1798 ", __get_str(%s)", 1799 tp->args[i].name); 1800 else 1801 pos += snprintf(buf + pos, LEN_OR_ZERO, ", REC->%s", 1802 tp->args[i].name); 1803 } 1804 1805 #undef LEN_OR_ZERO 1806 1807 /* return the length of print_fmt */ 1808 return pos; 1809 } 1810 1811 static int set_print_fmt(struct trace_probe *tp) 1812 { 1813 int len; 1814 char *print_fmt; 1815 1816 /* First: called with 0 length to calculate the needed length */ 1817 len = __set_print_fmt(tp, NULL, 0); 1818 print_fmt = kmalloc(len + 1, GFP_KERNEL); 1819 if (!print_fmt) 1820 return -ENOMEM; 1821 1822 /* Second: actually write the @print_fmt */ 1823 __set_print_fmt(tp, print_fmt, len + 1); 1824 tp->call.print_fmt = print_fmt; 1825 1826 return 0; 1827 } 1828 1829 #ifdef CONFIG_PERF_EVENTS 1830 1831 /* Kprobe profile handler */ 1832 static __kprobes void kprobe_perf_func(struct kprobe *kp, 1833 struct pt_regs *regs) 1834 { 1835 struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp); 1836 struct ftrace_event_call *call = &tp->call; 1837 struct kprobe_trace_entry_head *entry; 1838 struct hlist_head *head; 1839 int size, __size, dsize; 1840 int rctx; 1841 1842 dsize = __get_data_size(tp, regs); 1843 __size = sizeof(*entry) + tp->size + dsize; 1844 size = ALIGN(__size + sizeof(u32), sizeof(u64)); 1845 size -= sizeof(u32); 1846 if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE, 1847 "profile buffer not large enough")) 1848 return; 1849 1850 entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx); 1851 if (!entry) 1852 return; 1853 1854 entry->ip = (unsigned long)kp->addr; 1855 memset(&entry[1], 0, dsize); 1856 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1857 1858 head = this_cpu_ptr(call->perf_events); 1859 perf_trace_buf_submit(entry, size, rctx, entry->ip, 1, regs, head); 1860 } 1861 1862 /* Kretprobe profile handler */ 1863 static __kprobes void kretprobe_perf_func(struct kretprobe_instance *ri, 1864 struct pt_regs *regs) 1865 { 1866 struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp); 1867 struct ftrace_event_call *call = &tp->call; 1868 struct kretprobe_trace_entry_head *entry; 1869 struct hlist_head *head; 1870 int size, __size, dsize; 1871 int rctx; 1872 1873 dsize = __get_data_size(tp, regs); 1874 __size = sizeof(*entry) + tp->size + dsize; 1875 size = ALIGN(__size + sizeof(u32), sizeof(u64)); 1876 size -= sizeof(u32); 1877 if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE, 1878 "profile buffer not large enough")) 1879 return; 1880 1881 entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx); 1882 if (!entry) 1883 return; 1884 1885 entry->func = (unsigned long)tp->rp.kp.addr; 1886 entry->ret_ip = (unsigned long)ri->ret_addr; 1887 store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); 1888 1889 head = this_cpu_ptr(call->perf_events); 1890 perf_trace_buf_submit(entry, size, rctx, entry->ret_ip, 1, regs, head); 1891 } 1892 #endif /* CONFIG_PERF_EVENTS */ 1893 1894 static __kprobes 1895 int kprobe_register(struct ftrace_event_call *event, enum trace_reg type) 1896 { 1897 struct trace_probe *tp = (struct trace_probe *)event->data; 1898 1899 switch (type) { 1900 case TRACE_REG_REGISTER: 1901 return enable_trace_probe(tp, TP_FLAG_TRACE); 1902 case TRACE_REG_UNREGISTER: 1903 disable_trace_probe(tp, TP_FLAG_TRACE); 1904 return 0; 1905 1906 #ifdef CONFIG_PERF_EVENTS 1907 case TRACE_REG_PERF_REGISTER: 1908 return enable_trace_probe(tp, TP_FLAG_PROFILE); 1909 case TRACE_REG_PERF_UNREGISTER: 1910 disable_trace_probe(tp, TP_FLAG_PROFILE); 1911 return 0; 1912 #endif 1913 } 1914 return 0; 1915 } 1916 1917 static __kprobes 1918 int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs) 1919 { 1920 struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp); 1921 1922 if (tp->flags & TP_FLAG_TRACE) 1923 kprobe_trace_func(kp, regs); 1924 #ifdef CONFIG_PERF_EVENTS 1925 if (tp->flags & TP_FLAG_PROFILE) 1926 kprobe_perf_func(kp, regs); 1927 #endif 1928 return 0; /* We don't tweek kernel, so just return 0 */ 1929 } 1930 1931 static __kprobes 1932 int kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs) 1933 { 1934 struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp); 1935 1936 if (tp->flags & TP_FLAG_TRACE) 1937 kretprobe_trace_func(ri, regs); 1938 #ifdef CONFIG_PERF_EVENTS 1939 if (tp->flags & TP_FLAG_PROFILE) 1940 kretprobe_perf_func(ri, regs); 1941 #endif 1942 return 0; /* We don't tweek kernel, so just return 0 */ 1943 } 1944 1945 static struct trace_event_functions kretprobe_funcs = { 1946 .trace = print_kretprobe_event 1947 }; 1948 1949 static struct trace_event_functions kprobe_funcs = { 1950 .trace = print_kprobe_event 1951 }; 1952 1953 static int register_probe_event(struct trace_probe *tp) 1954 { 1955 struct ftrace_event_call *call = &tp->call; 1956 int ret; 1957 1958 /* Initialize ftrace_event_call */ 1959 INIT_LIST_HEAD(&call->class->fields); 1960 if (trace_probe_is_return(tp)) { 1961 call->event.funcs = &kretprobe_funcs; 1962 call->class->define_fields = kretprobe_event_define_fields; 1963 } else { 1964 call->event.funcs = &kprobe_funcs; 1965 call->class->define_fields = kprobe_event_define_fields; 1966 } 1967 if (set_print_fmt(tp) < 0) 1968 return -ENOMEM; 1969 ret = register_ftrace_event(&call->event); 1970 if (!ret) { 1971 kfree(call->print_fmt); 1972 return -ENODEV; 1973 } 1974 call->flags = 0; 1975 call->class->reg = kprobe_register; 1976 call->data = tp; 1977 ret = trace_add_event_call(call); 1978 if (ret) { 1979 pr_info("Failed to register kprobe event: %s\n", call->name); 1980 kfree(call->print_fmt); 1981 unregister_ftrace_event(&call->event); 1982 } 1983 return ret; 1984 } 1985 1986 static void unregister_probe_event(struct trace_probe *tp) 1987 { 1988 /* tp->event is unregistered in trace_remove_event_call() */ 1989 trace_remove_event_call(&tp->call); 1990 kfree(tp->call.print_fmt); 1991 } 1992 1993 /* Make a debugfs interface for controlling probe points */ 1994 static __init int init_kprobe_trace(void) 1995 { 1996 struct dentry *d_tracer; 1997 struct dentry *entry; 1998 1999 if (register_module_notifier(&trace_probe_module_nb)) 2000 return -EINVAL; 2001 2002 d_tracer = tracing_init_dentry(); 2003 if (!d_tracer) 2004 return 0; 2005 2006 entry = debugfs_create_file("kprobe_events", 0644, d_tracer, 2007 NULL, &kprobe_events_ops); 2008 2009 /* Event list interface */ 2010 if (!entry) 2011 pr_warning("Could not create debugfs " 2012 "'kprobe_events' entry\n"); 2013 2014 /* Profile interface */ 2015 entry = debugfs_create_file("kprobe_profile", 0444, d_tracer, 2016 NULL, &kprobe_profile_ops); 2017 2018 if (!entry) 2019 pr_warning("Could not create debugfs " 2020 "'kprobe_profile' entry\n"); 2021 return 0; 2022 } 2023 fs_initcall(init_kprobe_trace); 2024 2025 2026 #ifdef CONFIG_FTRACE_STARTUP_TEST 2027 2028 /* 2029 * The "__used" keeps gcc from removing the function symbol 2030 * from the kallsyms table. 2031 */ 2032 static __used int kprobe_trace_selftest_target(int a1, int a2, int a3, 2033 int a4, int a5, int a6) 2034 { 2035 return a1 + a2 + a3 + a4 + a5 + a6; 2036 } 2037 2038 static __init int kprobe_trace_self_tests_init(void) 2039 { 2040 int ret, warn = 0; 2041 int (*target)(int, int, int, int, int, int); 2042 struct trace_probe *tp; 2043 2044 target = kprobe_trace_selftest_target; 2045 2046 pr_info("Testing kprobe tracing: "); 2047 2048 ret = command_trace_probe("p:testprobe kprobe_trace_selftest_target " 2049 "$stack $stack0 +0($stack)"); 2050 if (WARN_ON_ONCE(ret)) { 2051 pr_warning("error on probing function entry.\n"); 2052 warn++; 2053 } else { 2054 /* Enable trace point */ 2055 tp = find_trace_probe("testprobe", KPROBE_EVENT_SYSTEM); 2056 if (WARN_ON_ONCE(tp == NULL)) { 2057 pr_warning("error on getting new probe.\n"); 2058 warn++; 2059 } else 2060 enable_trace_probe(tp, TP_FLAG_TRACE); 2061 } 2062 2063 ret = command_trace_probe("r:testprobe2 kprobe_trace_selftest_target " 2064 "$retval"); 2065 if (WARN_ON_ONCE(ret)) { 2066 pr_warning("error on probing function return.\n"); 2067 warn++; 2068 } else { 2069 /* Enable trace point */ 2070 tp = find_trace_probe("testprobe2", KPROBE_EVENT_SYSTEM); 2071 if (WARN_ON_ONCE(tp == NULL)) { 2072 pr_warning("error on getting new probe.\n"); 2073 warn++; 2074 } else 2075 enable_trace_probe(tp, TP_FLAG_TRACE); 2076 } 2077 2078 if (warn) 2079 goto end; 2080 2081 ret = target(1, 2, 3, 4, 5, 6); 2082 2083 /* Disable trace points before removing it */ 2084 tp = find_trace_probe("testprobe", KPROBE_EVENT_SYSTEM); 2085 if (WARN_ON_ONCE(tp == NULL)) { 2086 pr_warning("error on getting test probe.\n"); 2087 warn++; 2088 } else 2089 disable_trace_probe(tp, TP_FLAG_TRACE); 2090 2091 tp = find_trace_probe("testprobe2", KPROBE_EVENT_SYSTEM); 2092 if (WARN_ON_ONCE(tp == NULL)) { 2093 pr_warning("error on getting 2nd test probe.\n"); 2094 warn++; 2095 } else 2096 disable_trace_probe(tp, TP_FLAG_TRACE); 2097 2098 ret = command_trace_probe("-:testprobe"); 2099 if (WARN_ON_ONCE(ret)) { 2100 pr_warning("error on deleting a probe.\n"); 2101 warn++; 2102 } 2103 2104 ret = command_trace_probe("-:testprobe2"); 2105 if (WARN_ON_ONCE(ret)) { 2106 pr_warning("error on deleting a probe.\n"); 2107 warn++; 2108 } 2109 2110 end: 2111 release_all_trace_probes(); 2112 if (warn) 2113 pr_cont("NG: Some tests are failed. Please check them.\n"); 2114 else 2115 pr_cont("OK\n"); 2116 return 0; 2117 } 2118 2119 late_initcall(kprobe_trace_self_tests_init); 2120 2121 #endif 2122