trace_kprobe.c 37.9 KB
Newer Older
1
/*
2
 * Kprobes-based tracing events
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
 *
 * Created by Masami Hiramatsu <mhiramat@redhat.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
19
#define pr_fmt(fmt)	"trace_kprobe: " fmt
20 21 22

#include <linux/module.h>
#include <linux/uaccess.h>
23
#include <linux/rculist.h>
24

25
#include "trace_probe.h"
26

27
#define KPROBE_EVENT_SYSTEM "kprobes"
28
#define KRETPROBE_MAXACTIVE_MAX 4096
29

30
/**
31
 * Kprobe event core functions
32
 */
33
struct trace_kprobe {
34
	struct list_head	list;
35
	struct kretprobe	rp;	/* Use rp.kp for kprobe use */
36
	unsigned long __percpu *nhit;
37
	const char		*symbol;	/* symbol name */
38
	struct trace_probe	tp;
39 40
};

41 42
#define SIZEOF_TRACE_KPROBE(n)				\
	(offsetof(struct trace_kprobe, tp.args) +	\
43
	(sizeof(struct probe_arg) * (n)))
44

45

46
static nokprobe_inline bool trace_kprobe_is_return(struct trace_kprobe *tk)
47
{
48
	return tk->rp.handler != NULL;
49 50
}

51
static nokprobe_inline const char *trace_kprobe_symbol(struct trace_kprobe *tk)
52
{
53
	return tk->symbol ? tk->symbol : "unknown";
54 55
}

56
static nokprobe_inline unsigned long trace_kprobe_offset(struct trace_kprobe *tk)
57
{
58
	return tk->rp.kp.offset;
59 60
}

61
static nokprobe_inline bool trace_kprobe_has_gone(struct trace_kprobe *tk)
62
{
63
	return !!(kprobe_gone(&tk->rp.kp));
64 65
}

66
static nokprobe_inline bool trace_kprobe_within_module(struct trace_kprobe *tk,
67
						 struct module *mod)
68 69
{
	int len = strlen(mod->name);
70
	const char *name = trace_kprobe_symbol(tk);
71 72 73
	return strncmp(mod->name, name, len) == 0 && name[len] == ':';
}

74
static nokprobe_inline bool trace_kprobe_is_on_module(struct trace_kprobe *tk)
75
{
76
	return !!strchr(trace_kprobe_symbol(tk), ':');
77 78
}

79 80 81 82 83 84 85 86 87 88 89
static nokprobe_inline unsigned long trace_kprobe_nhit(struct trace_kprobe *tk)
{
	unsigned long nhit = 0;
	int cpu;

	for_each_possible_cpu(cpu)
		nhit += *per_cpu_ptr(tk->nhit, cpu);

	return nhit;
}

90 91
static int register_kprobe_event(struct trace_kprobe *tk);
static int unregister_kprobe_event(struct trace_kprobe *tk);
92 93 94 95

static DEFINE_MUTEX(probe_lock);
static LIST_HEAD(probe_list);

96 97 98 99
static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs);
static int kretprobe_dispatcher(struct kretprobe_instance *ri,
				struct pt_regs *regs);

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
/* Memory fetching by symbol */
struct symbol_cache {
	char		*symbol;
	long		offset;
	unsigned long	addr;
};

unsigned long update_symbol_cache(struct symbol_cache *sc)
{
	sc->addr = (unsigned long)kallsyms_lookup_name(sc->symbol);

	if (sc->addr)
		sc->addr += sc->offset;

	return sc->addr;
}

void free_symbol_cache(struct symbol_cache *sc)
{
	kfree(sc->symbol);
	kfree(sc);
}

struct symbol_cache *alloc_symbol_cache(const char *sym, long offset)
{
	struct symbol_cache *sc;

	if (!sym || strlen(sym) == 0)
		return NULL;

	sc = kzalloc(sizeof(struct symbol_cache), GFP_KERNEL);
	if (!sc)
		return NULL;

	sc->symbol = kstrdup(sym, GFP_KERNEL);
	if (!sc->symbol) {
		kfree(sc);
		return NULL;
	}
	sc->offset = offset;
	update_symbol_cache(sc);

	return sc;
}

145 146 147 148
/*
 * Kprobes-specific fetch functions
 */
#define DEFINE_FETCH_stack(type)					\
149
static void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs,		\
150 151 152 153
					  void *offset, void *dest)	\
{									\
	*(type *)dest = (type)regs_get_kernel_stack_nth(regs,		\
				(unsigned int)((unsigned long)offset));	\
154 155 156
}									\
NOKPROBE_SYMBOL(FETCH_FUNC_NAME(stack, type));

157 158 159 160 161
DEFINE_BASIC_FETCH_FUNCS(stack)
/* No string on the stack entry */
#define fetch_stack_string	NULL
#define fetch_stack_string_size	NULL

162
#define DEFINE_FETCH_memory(type)					\
163
static void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs,		\
164 165 166 167 168 169 170
					  void *addr, void *dest)	\
{									\
	type retval;							\
	if (probe_kernel_address(addr, retval))				\
		*(type *)dest = 0;					\
	else								\
		*(type *)dest = retval;					\
171 172 173
}									\
NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, type));

174 175 176 177 178
DEFINE_BASIC_FETCH_FUNCS(memory)
/*
 * Fetch a null-terminated string. Caller MUST set *(u32 *)dest with max
 * length and relative data location.
 */
179 180
static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
					    void *addr, void *dest)
181 182 183
{
	int maxlen = get_rloc_len(*(u32 *)dest);
	u8 *dst = get_rloc_data(dest);
184
	long ret;
185 186 187 188 189 190 191 192

	if (!maxlen)
		return;

	/*
	 * Try to get string again, since the string can be changed while
	 * probing.
	 */
193
	ret = strncpy_from_unsafe(dst, addr, maxlen);
194 195

	if (ret < 0) {	/* Failed to fetch string */
196
		dst[0] = '\0';
197 198
		*(u32 *)dest = make_data_rloc(0, get_rloc_offs(*(u32 *)dest));
	} else {
199
		*(u32 *)dest = make_data_rloc(ret, get_rloc_offs(*(u32 *)dest));
200 201
	}
}
202
NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string));
203 204

/* Return the length of string -- including null terminal byte */
205 206
static void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
						 void *addr, void *dest)
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
{
	mm_segment_t old_fs;
	int ret, len = 0;
	u8 c;

	old_fs = get_fs();
	set_fs(KERNEL_DS);
	pagefault_disable();

	do {
		ret = __copy_from_user_inatomic(&c, (u8 *)addr + len, 1);
		len++;
	} while (c && ret == 0 && len < MAX_STRING_SIZE);

	pagefault_enable();
	set_fs(old_fs);

	if (ret < 0)	/* Failed to check the length */
		*(u32 *)dest = 0;
	else
		*(u32 *)dest = len;
}
229
NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string_size));
230

231
#define DEFINE_FETCH_symbol(type)					\
232
void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs, void *data, void *dest)\
233 234 235 236 237 238
{									\
	struct symbol_cache *sc = data;					\
	if (sc->addr)							\
		fetch_memory_##type(regs, (void *)sc->addr, dest);	\
	else								\
		*(type *)dest = 0;					\
239 240 241
}									\
NOKPROBE_SYMBOL(FETCH_FUNC_NAME(symbol, type));

242 243 244 245
DEFINE_BASIC_FETCH_FUNCS(symbol)
DEFINE_FETCH_symbol(string)
DEFINE_FETCH_symbol(string_size)

246 247 248 249 250 251 252 253
/* kprobes don't support file_offset fetch methods */
#define fetch_file_offset_u8		NULL
#define fetch_file_offset_u16		NULL
#define fetch_file_offset_u32		NULL
#define fetch_file_offset_u64		NULL
#define fetch_file_offset_string	NULL
#define fetch_file_offset_string_size	NULL

254
/* Fetch type information table */
255
static const struct fetch_type kprobes_fetch_type_table[] = {
256 257 258 259 260 261 262 263 264 265 266 267 268 269
	/* Special types */
	[FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string,
					sizeof(u32), 1, "__data_loc char[]"),
	[FETCH_TYPE_STRSIZE] = __ASSIGN_FETCH_TYPE("string_size", u32,
					string_size, sizeof(u32), 0, "u32"),
	/* Basic types */
	ASSIGN_FETCH_TYPE(u8,  u8,  0),
	ASSIGN_FETCH_TYPE(u16, u16, 0),
	ASSIGN_FETCH_TYPE(u32, u32, 0),
	ASSIGN_FETCH_TYPE(u64, u64, 0),
	ASSIGN_FETCH_TYPE(s8,  u8,  1),
	ASSIGN_FETCH_TYPE(s16, u16, 1),
	ASSIGN_FETCH_TYPE(s32, u32, 1),
	ASSIGN_FETCH_TYPE(s64, u64, 1),
270 271 272 273
	ASSIGN_FETCH_TYPE_ALIAS(x8,  u8,  u8,  0),
	ASSIGN_FETCH_TYPE_ALIAS(x16, u16, u16, 0),
	ASSIGN_FETCH_TYPE_ALIAS(x32, u32, u32, 0),
	ASSIGN_FETCH_TYPE_ALIAS(x64, u64, u64, 0),
274 275 276 277

	ASSIGN_FETCH_TYPE_END
};

278 279 280
/*
 * Allocate new trace_probe and initialize it (including kprobes).
 */
281
static struct trace_kprobe *alloc_trace_kprobe(const char *group,
282
					     const char *event,
283 284 285
					     void *addr,
					     const char *symbol,
					     unsigned long offs,
286
					     int maxactive,
287
					     int nargs, bool is_return)
288
{
289
	struct trace_kprobe *tk;
290
	int ret = -ENOMEM;
291

292 293
	tk = kzalloc(SIZEOF_TRACE_KPROBE(nargs), GFP_KERNEL);
	if (!tk)
294
		return ERR_PTR(ret);
295

296 297 298 299
	tk->nhit = alloc_percpu(unsigned long);
	if (!tk->nhit)
		goto error;

300
	if (symbol) {
301 302
		tk->symbol = kstrdup(symbol, GFP_KERNEL);
		if (!tk->symbol)
303
			goto error;
304 305
		tk->rp.kp.symbol_name = tk->symbol;
		tk->rp.kp.offset = offs;
306
	} else
307
		tk->rp.kp.addr = addr;
308 309

	if (is_return)
310
		tk->rp.handler = kretprobe_dispatcher;
311
	else
312
		tk->rp.kp.pre_handler = kprobe_dispatcher;
313

314 315
	tk->rp.maxactive = maxactive;

316
	if (!event || !is_good_name(event)) {
317
		ret = -EINVAL;
318
		goto error;
319 320
	}

321 322 323
	tk->tp.call.class = &tk->tp.class;
	tk->tp.call.name = kstrdup(event, GFP_KERNEL);
	if (!tk->tp.call.name)
324
		goto error;
325

326
	if (!group || !is_good_name(group)) {
327
		ret = -EINVAL;
328
		goto error;
329 330
	}

331 332
	tk->tp.class.system = kstrdup(group, GFP_KERNEL);
	if (!tk->tp.class.system)
333 334
		goto error;

335 336 337
	INIT_LIST_HEAD(&tk->list);
	INIT_LIST_HEAD(&tk->tp.files);
	return tk;
338
error:
339 340
	kfree(tk->tp.call.name);
	kfree(tk->symbol);
341
	free_percpu(tk->nhit);
342
	kfree(tk);
343
	return ERR_PTR(ret);
344 345
}

346
static void free_trace_kprobe(struct trace_kprobe *tk)
347 348 349
{
	int i;

350 351
	for (i = 0; i < tk->tp.nr_args; i++)
		traceprobe_free_probe_arg(&tk->tp.args[i]);
352

353 354 355
	kfree(tk->tp.call.class->system);
	kfree(tk->tp.call.name);
	kfree(tk->symbol);
356
	free_percpu(tk->nhit);
357
	kfree(tk);
358 359
}

360 361
static struct trace_kprobe *find_trace_kprobe(const char *event,
					      const char *group)
362
{
363
	struct trace_kprobe *tk;
364

365
	list_for_each_entry(tk, &probe_list, list)
366
		if (strcmp(trace_event_name(&tk->tp.call), event) == 0 &&
367 368
		    strcmp(tk->tp.call.class->system, group) == 0)
			return tk;
369 370 371
	return NULL;
}

372 373 374 375 376
/*
 * Enable trace_probe
 * if the file is NULL, enable "perf" handler, or enable "trace" handler.
 */
static int
377
enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
378 379 380
{
	int ret = 0;

381
	if (file) {
382 383 384 385
		struct event_file_link *link;

		link = kmalloc(sizeof(*link), GFP_KERNEL);
		if (!link) {
386
			ret = -ENOMEM;
387
			goto out;
388 389
		}

390
		link->file = file;
391
		list_add_tail_rcu(&link->list, &tk->tp.files);
392

393
		tk->tp.flags |= TP_FLAG_TRACE;
394
	} else
395
		tk->tp.flags |= TP_FLAG_PROFILE;
396

397 398 399
	if (trace_probe_is_registered(&tk->tp) && !trace_kprobe_has_gone(tk)) {
		if (trace_kprobe_is_return(tk))
			ret = enable_kretprobe(&tk->rp);
400
		else
401
			ret = enable_kprobe(&tk->rp.kp);
402
	}
403
 out:
404 405 406
	return ret;
}

407 408 409 410 411
/*
 * Disable trace_probe
 * if the file is NULL, disable "perf" handler, or disable "trace" handler.
 */
static int
412
disable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
413
{
414 415
	struct event_file_link *link = NULL;
	int wait = 0;
416 417 418
	int ret = 0;

	if (file) {
419
		link = find_event_file_link(&tk->tp, file);
420
		if (!link) {
421
			ret = -EINVAL;
422
			goto out;
423 424
		}

425
		list_del_rcu(&link->list);
426
		wait = 1;
427
		if (!list_empty(&tk->tp.files))
428
			goto out;
429

430
		tk->tp.flags &= ~TP_FLAG_TRACE;
431
	} else
432
		tk->tp.flags &= ~TP_FLAG_PROFILE;
433

434 435 436
	if (!trace_probe_is_enabled(&tk->tp) && trace_probe_is_registered(&tk->tp)) {
		if (trace_kprobe_is_return(tk))
			disable_kretprobe(&tk->rp);
437
		else
438
			disable_kprobe(&tk->rp.kp);
439
		wait = 1;
440
	}
441
 out:
442 443 444 445 446 447 448 449 450 451 452 453 454
	if (wait) {
		/*
		 * Synchronize with kprobe_trace_func/kretprobe_trace_func
		 * to ensure disabled (all running handlers are finished).
		 * This is not only for kfree(), but also the caller,
		 * trace_remove_event_call() supposes it for releasing
		 * event_call related objects, which will be accessed in
		 * the kprobe_trace_func/kretprobe_trace_func.
		 */
		synchronize_sched();
		kfree(link);	/* Ignored if link == NULL */
	}

455
	return ret;
456 457
}

458
/* Internal register function - just handle k*probes and flags */
459
static int __register_trace_kprobe(struct trace_kprobe *tk)
460
{
461
	int i, ret;
462

463
	if (trace_probe_is_registered(&tk->tp))
464 465
		return -EINVAL;

466 467
	for (i = 0; i < tk->tp.nr_args; i++)
		traceprobe_update_arg(&tk->tp.args[i]);
468

469
	/* Set/clear disabled flag according to tp->flag */
470 471
	if (trace_probe_is_enabled(&tk->tp))
		tk->rp.kp.flags &= ~KPROBE_FLAG_DISABLED;
472
	else
473
		tk->rp.kp.flags |= KPROBE_FLAG_DISABLED;
474

475 476
	if (trace_kprobe_is_return(tk))
		ret = register_kretprobe(&tk->rp);
477
	else
478
		ret = register_kprobe(&tk->rp.kp);
479 480

	if (ret == 0)
481
		tk->tp.flags |= TP_FLAG_REGISTERED;
482
	else {
483 484
		pr_warn("Could not insert probe at %s+%lu: %d\n",
			trace_kprobe_symbol(tk), trace_kprobe_offset(tk), ret);
485
		if (ret == -ENOENT && trace_kprobe_is_on_module(tk)) {
486
			pr_warn("This probe might be able to register after target module is loaded. Continue.\n");
487 488
			ret = 0;
		} else if (ret == -EILSEQ) {
489 490
			pr_warn("Probing address(0x%p) is not an instruction boundary.\n",
				tk->rp.kp.addr);
491 492 493 494 495 496 497 498
			ret = -EINVAL;
		}
	}

	return ret;
}

/* Internal unregister function - just handle k*probes and flags */
499
static void __unregister_trace_kprobe(struct trace_kprobe *tk)
500
{
501 502 503
	if (trace_probe_is_registered(&tk->tp)) {
		if (trace_kprobe_is_return(tk))
			unregister_kretprobe(&tk->rp);
504
		else
505 506
			unregister_kprobe(&tk->rp.kp);
		tk->tp.flags &= ~TP_FLAG_REGISTERED;
507
		/* Cleanup kprobe for reuse */
508 509
		if (tk->rp.kp.symbol_name)
			tk->rp.kp.addr = NULL;
510 511 512 513
	}
}

/* Unregister a trace_probe and probe_event: call with locking probe_lock */
514
static int unregister_trace_kprobe(struct trace_kprobe *tk)
515
{
516
	/* Enabled event can not be unregistered */
517
	if (trace_probe_is_enabled(&tk->tp))
518 519
		return -EBUSY;

520
	/* Will fail if probe is being used by ftrace or perf */
521
	if (unregister_kprobe_event(tk))
522 523
		return -EBUSY;

524 525
	__unregister_trace_kprobe(tk);
	list_del(&tk->list);
526 527

	return 0;
528 529 530
}

/* Register a trace_probe and probe_event */
531
static int register_trace_kprobe(struct trace_kprobe *tk)
532
{
533
	struct trace_kprobe *old_tk;
534 535 536 537
	int ret;

	mutex_lock(&probe_lock);

538
	/* Delete old (same name) event if exist */
539
	old_tk = find_trace_kprobe(trace_event_name(&tk->tp.call),
540
			tk->tp.call.class->system);
541 542
	if (old_tk) {
		ret = unregister_trace_kprobe(old_tk);
543 544
		if (ret < 0)
			goto end;
545
		free_trace_kprobe(old_tk);
546
	}
547 548

	/* Register new event */
549
	ret = register_kprobe_event(tk);
550
	if (ret) {
551
		pr_warn("Failed to register probe event(%d)\n", ret);
552 553 554
		goto end;
	}

555
	/* Register k*probe */
556
	ret = __register_trace_kprobe(tk);
557
	if (ret < 0)
558
		unregister_kprobe_event(tk);
559
	else
560
		list_add_tail(&tk->list, &probe_list);
561

562 563 564 565 566
end:
	mutex_unlock(&probe_lock);
	return ret;
}

567
/* Module notifier call back, checking event on the module */
568
static int trace_kprobe_module_callback(struct notifier_block *nb,
569 570 571
				       unsigned long val, void *data)
{
	struct module *mod = data;
572
	struct trace_kprobe *tk;
573 574 575 576 577 578 579
	int ret;

	if (val != MODULE_STATE_COMING)
		return NOTIFY_DONE;

	/* Update probes on coming module */
	mutex_lock(&probe_lock);
580 581
	list_for_each_entry(tk, &probe_list, list) {
		if (trace_kprobe_within_module(tk, mod)) {
582
			/* Don't need to check busy - this should have gone. */
583 584
			__unregister_trace_kprobe(tk);
			ret = __register_trace_kprobe(tk);
585
			if (ret)
586 587 588
				pr_warn("Failed to re-register probe %s on %s: %d\n",
					trace_event_name(&tk->tp.call),
					mod->name, ret);
589 590 591 592 593 594 595
		}
	}
	mutex_unlock(&probe_lock);

	return NOTIFY_DONE;
}

596 597
static struct notifier_block trace_kprobe_module_nb = {
	.notifier_call = trace_kprobe_module_callback,
598 599 600
	.priority = 1	/* Invoked after kprobe module callback */
};

601
static int create_trace_kprobe(int argc, char **argv)
602 603 604
{
	/*
	 * Argument syntax:
605 606 607 608
	 *  - Add kprobe:
	 *      p[:[GRP/]EVENT] [MOD:]KSYM[+OFFS]|KADDR [FETCHARGS]
	 *  - Add kretprobe:
	 *      r[MAXACTIVE][:[GRP/]EVENT] [MOD:]KSYM[+0] [FETCHARGS]
609
	 * Fetch args:
610 611 612
	 *  $retval	: fetch return value
	 *  $stack	: fetch stack address
	 *  $stackN	: fetch Nth of stack (N:0-)
613
	 *  $comm       : fetch current task comm
614 615 616
	 *  @ADDR	: fetch memory at ADDR (ADDR should be in kernel)
	 *  @SYM[+|-offs] : fetch memory at SYM +|- offs (SYM is a data symbol)
	 *  %REG	: fetch register REG
617
	 * Dereferencing memory fetch:
618
	 *  +|-offs(ARG) : fetch memory at ARG +|- offs address.
619 620
	 * Alias name of args:
	 *  NAME=FETCHARG : set NAME as alias of FETCHARG.
621 622
	 * Type of args:
	 *  FETCHARG:TYPE : use TYPE instead of unsigned long.
623
	 */
624
	struct trace_kprobe *tk;
625
	int i, ret = 0;
626
	bool is_return = false, is_delete = false;
627
	char *symbol = NULL, *event = NULL, *group = NULL;
628
	int maxactive = 0;
629
	char *arg;
630
	unsigned long offset = 0;
631
	void *addr = NULL;
632
	char buf[MAX_EVENT_NAME_LEN];
633

634
	/* argc must be >= 1 */
635
	if (argv[0][0] == 'p')
636
		is_return = false;
637
	else if (argv[0][0] == 'r')
638
		is_return = true;
639
	else if (argv[0][0] == '-')
640
		is_delete = true;
641
	else {
642 643
		pr_info("Probe definition must be started with 'p', 'r' or"
			" '-'.\n");
644
		return -EINVAL;
645
	}
646

647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668
	event = strchr(&argv[0][1], ':');
	if (event) {
		event[0] = '\0';
		event++;
	}
	if (is_return && isdigit(argv[0][1])) {
		ret = kstrtouint(&argv[0][1], 0, &maxactive);
		if (ret) {
			pr_info("Failed to parse maxactive.\n");
			return ret;
		}
		/* kretprobes instances are iterated over via a list. The
		 * maximum should stay reasonable.
		 */
		if (maxactive > KRETPROBE_MAXACTIVE_MAX) {
			pr_info("Maxactive is too big (%d > %d).\n",
				maxactive, KRETPROBE_MAXACTIVE_MAX);
			return -E2BIG;
		}
	}

	if (event) {
669 670 671 672 673
		if (strchr(event, '/')) {
			group = event;
			event = strchr(group, '/') + 1;
			event[-1] = '\0';
			if (strlen(group) == 0) {
674
				pr_info("Group name is not specified\n");
675 676 677
				return -EINVAL;
			}
		}
678
		if (strlen(event) == 0) {
679
			pr_info("Event name is not specified\n");
680 681 682
			return -EINVAL;
		}
	}
683 684
	if (!group)
		group = KPROBE_EVENT_SYSTEM;
685

686 687 688 689 690
	if (is_delete) {
		if (!event) {
			pr_info("Delete command needs an event name.\n");
			return -EINVAL;
		}
691
		mutex_lock(&probe_lock);
692 693
		tk = find_trace_kprobe(event, group);
		if (!tk) {
694
			mutex_unlock(&probe_lock);
695 696 697 698
			pr_info("Event %s/%s doesn't exist.\n", group, event);
			return -ENOENT;
		}
		/* delete an event */
699
		ret = unregister_trace_kprobe(tk);
700
		if (ret == 0)
701
			free_trace_kprobe(tk);
702
		mutex_unlock(&probe_lock);
703
		return ret;
704 705 706 707 708 709
	}

	if (argc < 2) {
		pr_info("Probe point is not specified.\n");
		return -EINVAL;
	}
710 711 712 713

	/* try to parse an address. if that fails, try to read the
	 * input as a symbol. */
	if (kstrtoul(argv[1], 0, (unsigned long *)&addr)) {
714 715 716
		/* a symbol specified */
		symbol = argv[1];
		/* TODO: support .init module functions */
717
		ret = traceprobe_split_symbol_offset(symbol, &offset);
718
		if (ret) {
719
			pr_info("Failed to parse either an address or a symbol.\n");
720
			return ret;
721
		}
722
		if (offset && is_return &&
723
		    !function_offset_within_entry(NULL, symbol, offset)) {
724
			pr_info("Given offset is not valid for return probe.\n");
725
			return -EINVAL;
726
		}
727
	}
728
	argc -= 2; argv += 2;
729 730

	/* setup a probe */
731 732 733
	if (!event) {
		/* Make a new event name */
		if (symbol)
734
			snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_%ld",
735 736
				 is_return ? 'r' : 'p', symbol, offset);
		else
737
			snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p",
738
				 is_return ? 'r' : 'p', addr);
739 740
		event = buf;
	}
741 742
	tk = alloc_trace_kprobe(group, event, addr, symbol, offset, maxactive,
			       argc, is_return);
743
	if (IS_ERR(tk)) {
744
		pr_info("Failed to allocate trace_probe.(%d)\n",
745 746
			(int)PTR_ERR(tk));
		return PTR_ERR(tk);
747
	}
748 749

	/* parse arguments */
750 751
	ret = 0;
	for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) {
752 753
		struct probe_arg *parg = &tk->tp.args[i];

754
		/* Increment count for freeing args in error case */
755
		tk->tp.nr_args++;
756

757 758
		/* Parse argument name */
		arg = strchr(argv[i], '=');
759
		if (arg) {
760
			*arg++ = '\0';
761
			parg->name = kstrdup(argv[i], GFP_KERNEL);
762
		} else {
763
			arg = argv[i];
764 765
			/* If argument name is omitted, set "argN" */
			snprintf(buf, MAX_EVENT_NAME_LEN, "arg%d", i + 1);
766
			parg->name = kstrdup(buf, GFP_KERNEL);
767
		}
768

769
		if (!parg->name) {
770
			pr_info("Failed to allocate argument[%d] name.\n", i);
771
			ret = -ENOMEM;
772 773
			goto error;
		}
774

775
		if (!is_good_name(parg->name)) {
776
			pr_info("Invalid argument[%d] name: %s\n",
777
				i, parg->name);
778 779 780
			ret = -EINVAL;
			goto error;
		}
781

782 783
		if (traceprobe_conflict_field_name(parg->name,
							tk->tp.args, i)) {
784
			pr_info("Argument[%d] name '%s' conflicts with "
785 786 787 788
				"another field.\n", i, argv[i]);
			ret = -EINVAL;
			goto error;
		}
789 790

		/* Parse fetch argument */
791
		ret = traceprobe_parse_probe_arg(arg, &tk->tp.size, parg,
792 793
						is_return, true,
						kprobes_fetch_type_table);
794
		if (ret) {
795
			pr_info("Parse error at argument[%d]. (%d)\n", i, ret);
796
			goto error;
797
		}
798 799
	}

800
	ret = register_trace_kprobe(tk);
801 802 803 804 805
	if (ret)
		goto error;
	return 0;

error:
806
	free_trace_kprobe(tk);
807 808 809
	return ret;
}

810
static int release_all_trace_kprobes(void)
811
{
812
	struct trace_kprobe *tk;
813
	int ret = 0;
814 815

	mutex_lock(&probe_lock);
816
	/* Ensure no probe is in use. */
817 818
	list_for_each_entry(tk, &probe_list, list)
		if (trace_probe_is_enabled(&tk->tp)) {
819 820 821
			ret = -EBUSY;
			goto end;
		}
822 823
	/* TODO: Use batch unregistration */
	while (!list_empty(&probe_list)) {
824 825
		tk = list_entry(probe_list.next, struct trace_kprobe, list);
		ret = unregister_trace_kprobe(tk);
826 827
		if (ret)
			goto end;
828
		free_trace_kprobe(tk);
829
	}
830 831

end:
832
	mutex_unlock(&probe_lock);
833 834

	return ret;
835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855
}

/* Probes listing interfaces */
static void *probes_seq_start(struct seq_file *m, loff_t *pos)
{
	mutex_lock(&probe_lock);
	return seq_list_start(&probe_list, *pos);
}

static void *probes_seq_next(struct seq_file *m, void *v, loff_t *pos)
{
	return seq_list_next(v, &probe_list, pos);
}

static void probes_seq_stop(struct seq_file *m, void *v)
{
	mutex_unlock(&probe_lock);
}

static int probes_seq_show(struct seq_file *m, void *v)
{
856
	struct trace_kprobe *tk = v;
857
	int i;
858

859
	seq_putc(m, trace_kprobe_is_return(tk) ? 'r' : 'p');
860
	seq_printf(m, ":%s/%s", tk->tp.call.class->system,
861
			trace_event_name(&tk->tp.call));
862

863 864 865 866 867
	if (!tk->symbol)
		seq_printf(m, " 0x%p", tk->rp.kp.addr);
	else if (tk->rp.kp.offset)
		seq_printf(m, " %s+%u", trace_kprobe_symbol(tk),
			   tk->rp.kp.offset);
868
	else
869
		seq_printf(m, " %s", trace_kprobe_symbol(tk));
870

871 872
	for (i = 0; i < tk->tp.nr_args; i++)
		seq_printf(m, " %s=%s", tk->tp.args[i].name, tk->tp.args[i].comm);
873
	seq_putc(m, '\n');
874

875 876 877 878 879 880 881 882 883 884 885 886
	return 0;
}

static const struct seq_operations probes_seq_op = {
	.start  = probes_seq_start,
	.next   = probes_seq_next,
	.stop   = probes_seq_stop,
	.show   = probes_seq_show
};

static int probes_open(struct inode *inode, struct file *file)
{
887 888 889
	int ret;

	if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
890
		ret = release_all_trace_kprobes();
891 892 893
		if (ret < 0)
			return ret;
	}
894 895 896 897 898 899 900

	return seq_open(file, &probes_seq_op);
}

static ssize_t probes_write(struct file *file, const char __user *buffer,
			    size_t count, loff_t *ppos)
{
901
	return traceprobe_probes_write(file, buffer, count, ppos,
902
			create_trace_kprobe);
903 904 905 906 907 908 909 910 911 912 913
}

static const struct file_operations kprobe_events_ops = {
	.owner          = THIS_MODULE,
	.open           = probes_open,
	.read           = seq_read,
	.llseek         = seq_lseek,
	.release        = seq_release,
	.write		= probes_write,
};

914 915 916
/* Probes profiling interfaces */
static int probes_profile_seq_show(struct seq_file *m, void *v)
{
917
	struct trace_kprobe *tk = v;
918

919
	seq_printf(m, "  %-44s %15lu %15lu\n",
920 921
		   trace_event_name(&tk->tp.call),
		   trace_kprobe_nhit(tk),
922
		   tk->rp.kp.nmissed);
923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946

	return 0;
}

static const struct seq_operations profile_seq_op = {
	.start  = probes_seq_start,
	.next   = probes_seq_next,
	.stop   = probes_seq_stop,
	.show   = probes_profile_seq_show
};

static int profile_open(struct inode *inode, struct file *file)
{
	return seq_open(file, &profile_seq_op);
}

static const struct file_operations kprobe_profile_ops = {
	.owner          = THIS_MODULE,
	.open           = profile_open,
	.read           = seq_read,
	.llseek         = seq_lseek,
	.release        = seq_release,
};

947
/* Kprobe handler */
948
static nokprobe_inline void
949
__kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs,
950
		    struct trace_event_file *trace_file)
951
{
952
	struct kprobe_trace_entry_head *entry;
953
	struct ring_buffer_event *event;
954
	struct ring_buffer *buffer;
955
	int size, dsize, pc;
956
	unsigned long irq_flags;
957
	struct trace_event_call *call = &tk->tp.call;
958

959
	WARN_ON(call != trace_file->event_call);
960

961
	if (trace_trigger_soft_disabled(trace_file))
962
		return;
963

964 965 966
	local_save_flags(irq_flags);
	pc = preempt_count();

967 968
	dsize = __get_data_size(&tk->tp, regs);
	size = sizeof(*entry) + tk->tp.size + dsize;
969

970
	event = trace_event_buffer_lock_reserve(&buffer, trace_file,
971 972
						call->event.type,
						size, irq_flags, pc);
973
	if (!event)
974
		return;
975 976

	entry = ring_buffer_event_data(event);
977 978
	entry->ip = (unsigned long)tk->rp.kp.addr;
	store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
979

980
	event_trigger_unlock_commit_regs(trace_file, buffer, event,
981
					 entry, irq_flags, pc, regs);
982 983
}

984
static void
985
kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs)
986
{
987
	struct event_file_link *link;
988

989 990
	list_for_each_entry_rcu(link, &tk->tp.files, list)
		__kprobe_trace_func(tk, regs, link->file);
991
}
992
NOKPROBE_SYMBOL(kprobe_trace_func);
993

994
/* Kretprobe handler */
995
static nokprobe_inline void
996
__kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
997
		       struct pt_regs *regs,
998
		       struct trace_event_file *trace_file)
999
{
1000
	struct kretprobe_trace_entry_head *entry;
1001
	struct ring_buffer_event *event;
1002
	struct ring_buffer *buffer;
1003
	int size, pc, dsize;
1004
	unsigned long irq_flags;
1005
	struct trace_event_call *call = &tk->tp.call;
1006

1007
	WARN_ON(call != trace_file->event_call);
1008

1009
	if (trace_trigger_soft_disabled(trace_file))
1010
		return;
1011

1012 1013 1014
	local_save_flags(irq_flags);
	pc = preempt_count();

1015 1016
	dsize = __get_data_size(&tk->tp, regs);
	size = sizeof(*entry) + tk->tp.size + dsize;
1017

1018
	event = trace_event_buffer_lock_reserve(&buffer, trace_file,
1019 1020
						call->event.type,
						size, irq_flags, pc);
1021
	if (!event)
1022
		return;
1023 1024

	entry = ring_buffer_event_data(event);
1025
	entry->func = (unsigned long)tk->rp.kp.addr;
1026
	entry->ret_ip = (unsigned long)ri->ret_addr;
1027
	store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
1028

1029
	event_trigger_unlock_commit_regs(trace_file, buffer, event,
1030
					 entry, irq_flags, pc, regs);
1031 1032
}

1033
static void
1034
kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
1035 1036
		     struct pt_regs *regs)
{
1037
	struct event_file_link *link;
1038

1039 1040
	list_for_each_entry_rcu(link, &tk->tp.files, list)
		__kretprobe_trace_func(tk, ri, regs, link->file);
1041
}
1042
NOKPROBE_SYMBOL(kretprobe_trace_func);
1043

1044
/* Event entry printers */
1045
static enum print_line_t
1046 1047
print_kprobe_event(struct trace_iterator *iter, int flags,
		   struct trace_event *event)
1048
{
1049
	struct kprobe_trace_entry_head *field;
1050
	struct trace_seq *s = &iter->seq;
1051
	struct trace_probe *tp;
1052
	u8 *data;
1053 1054
	int i;

1055
	field = (struct kprobe_trace_entry_head *)iter->ent;
1056
	tp = container_of(event, struct trace_probe, call.event);
1057

1058
	trace_seq_printf(s, "%s: (", trace_event_name(&tp->call));
1059

1060
	if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
1061
		goto out;
1062

1063
	trace_seq_putc(s, ')');
1064

1065 1066 1067
	data = (u8 *)&field[1];
	for (i = 0; i < tp->nr_args; i++)
		if (!tp->args[i].type->print(s, tp->args[i].name,
1068
					     data + tp->args[i].offset, field))
1069
			goto out;
1070

1071 1072 1073
	trace_seq_putc(s, '\n');
 out:
	return trace_handle_return(s);
1074 1075
}

1076
static enum print_line_t
1077 1078
print_kretprobe_event(struct trace_iterator *iter, int flags,
		      struct trace_event *event)
1079
{
1080
	struct kretprobe_trace_entry_head *field;
1081
	struct trace_seq *s = &iter->seq;
1082
	struct trace_probe *tp;
1083
	u8 *data;
1084 1085
	int i;

1086
	field = (struct kretprobe_trace_entry_head *)iter->ent;
1087
	tp = container_of(event, struct trace_probe, call.event);
1088

1089
	trace_seq_printf(s, "%s: (", trace_event_name(&tp->call));
1090

1091
	if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET))
1092
		goto out;
1093

1094
	trace_seq_puts(s, " <- ");
1095 1096

	if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET))
1097
		goto out;
1098

1099
	trace_seq_putc(s, ')');
1100

1101 1102 1103
	data = (u8 *)&field[1];
	for (i = 0; i < tp->nr_args; i++)
		if (!tp->args[i].type->print(s, tp->args[i].name,
1104
					     data + tp->args[i].offset, field))
1105
			goto out;
1106

1107
	trace_seq_putc(s, '\n');
1108

1109 1110
 out:
	return trace_handle_return(s);
1111 1112 1113
}


1114
static int kprobe_event_define_fields(struct trace_event_call *event_call)
1115 1116
{
	int ret, i;
1117
	struct kprobe_trace_entry_head field;
1118
	struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data;
1119

1120
	DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0);
1121
	/* Set argument names as fields */
1122 1123 1124 1125 1126 1127 1128 1129
	for (i = 0; i < tk->tp.nr_args; i++) {
		struct probe_arg *parg = &tk->tp.args[i];

		ret = trace_define_field(event_call, parg->type->fmttype,
					 parg->name,
					 sizeof(field) + parg->offset,
					 parg->type->size,
					 parg->type->is_signed,
1130 1131 1132 1133
					 FILTER_OTHER);
		if (ret)
			return ret;
	}
1134 1135 1136
	return 0;
}

1137
static int kretprobe_event_define_fields(struct trace_event_call *event_call)
1138 1139
{
	int ret, i;
1140
	struct kretprobe_trace_entry_head field;
1141
	struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data;
1142

1143 1144
	DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0);
	DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0);
1145
	/* Set argument names as fields */
1146 1147 1148 1149 1150 1151 1152 1153
	for (i = 0; i < tk->tp.nr_args; i++) {
		struct probe_arg *parg = &tk->tp.args[i];

		ret = trace_define_field(event_call, parg->type->fmttype,
					 parg->name,
					 sizeof(field) + parg->offset,
					 parg->type->size,
					 parg->type->is_signed,
1154 1155 1156 1157
					 FILTER_OTHER);
		if (ret)
			return ret;
	}
1158 1159 1160
	return 0;
}

1161
#ifdef CONFIG_PERF_EVENTS
1162 1163

/* Kprobe profile handler */
1164
static void
1165
kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs)
1166
{
1167
	struct trace_event_call *call = &tk->tp.call;
1168
	struct bpf_prog *prog = call->prog;
1169
	struct kprobe_trace_entry_head *entry;
1170
	struct hlist_head *head;
1171
	int size, __size, dsize;
1172
	int rctx;
1173

1174 1175 1176
	if (prog && !trace_call_bpf(prog, regs))
		return;

1177 1178 1179 1180
	head = this_cpu_ptr(call->perf_events);
	if (hlist_empty(head))
		return;

1181 1182
	dsize = __get_data_size(&tk->tp, regs);
	__size = sizeof(*entry) + tk->tp.size + dsize;
1183 1184
	size = ALIGN(__size + sizeof(u32), sizeof(u64));
	size -= sizeof(u32);
1185

1186
	entry = perf_trace_buf_alloc(size, NULL, &rctx);
1187
	if (!entry)
1188
		return;
1189

1190
	entry->ip = (unsigned long)tk->rp.kp.addr;
1191
	memset(&entry[1], 0, dsize);
1192
	store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
1193 1194
	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
			      head, NULL);
1195
}
1196
NOKPROBE_SYMBOL(kprobe_perf_func);
1197 1198

/* Kretprobe profile handler */
1199
static void
1200
kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
1201
		    struct pt_regs *regs)
1202
{
1203
	struct trace_event_call *call = &tk->tp.call;
1204
	struct bpf_prog *prog = call->prog;
1205
	struct kretprobe_trace_entry_head *entry;
1206
	struct hlist_head *head;
1207
	int size, __size, dsize;
1208
	int rctx;
1209

1210 1211 1212
	if (prog && !trace_call_bpf(prog, regs))
		return;

1213 1214 1215 1216
	head = this_cpu_ptr(call->perf_events);
	if (hlist_empty(head))
		return;

1217 1218
	dsize = __get_data_size(&tk->tp, regs);
	__size = sizeof(*entry) + tk->tp.size + dsize;
1219 1220
	size = ALIGN(__size + sizeof(u32), sizeof(u64));
	size -= sizeof(u32);
1221

1222
	entry = perf_trace_buf_alloc(size, NULL, &rctx);
1223
	if (!entry)
1224
		return;
1225

1226
	entry->func = (unsigned long)tk->rp.kp.addr;
1227
	entry->ret_ip = (unsigned long)ri->ret_addr;
1228
	store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
1229 1230
	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
			      head, NULL);
1231
}
1232
NOKPROBE_SYMBOL(kretprobe_perf_func);
1233
#endif	/* CONFIG_PERF_EVENTS */
1234

1235 1236 1237 1238 1239 1240
/*
 * called by perf_trace_init() or __ftrace_set_clr_event() under event_mutex.
 *
 * kprobe_trace_self_tests_init() does enable_trace_probe/disable_trace_probe
 * lockless, but we can't race with this __init function.
 */
1241
static int kprobe_register(struct trace_event_call *event,
1242
			   enum trace_reg type, void *data)
1243
{
1244
	struct trace_kprobe *tk = (struct trace_kprobe *)event->data;
1245
	struct trace_event_file *file = data;
1246

1247 1248
	switch (type) {
	case TRACE_REG_REGISTER:
1249
		return enable_trace_kprobe(tk, file);
1250
	case TRACE_REG_UNREGISTER:
1251
		return disable_trace_kprobe(tk, file);
1252 1253 1254

#ifdef CONFIG_PERF_EVENTS
	case TRACE_REG_PERF_REGISTER:
1255
		return enable_trace_kprobe(tk, NULL);
1256
	case TRACE_REG_PERF_UNREGISTER:
1257
		return disable_trace_kprobe(tk, NULL);
1258 1259
	case TRACE_REG_PERF_OPEN:
	case TRACE_REG_PERF_CLOSE:
1260 1261
	case TRACE_REG_PERF_ADD:
	case TRACE_REG_PERF_DEL:
1262
		return 0;
1263 1264 1265 1266
#endif
	}
	return 0;
}
1267

1268
static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs)
1269
{
1270
	struct trace_kprobe *tk = container_of(kp, struct trace_kprobe, rp.kp);
1271

1272
	raw_cpu_inc(*tk->nhit);
1273

1274 1275
	if (tk->tp.flags & TP_FLAG_TRACE)
		kprobe_trace_func(tk, regs);
1276
#ifdef CONFIG_PERF_EVENTS
1277 1278
	if (tk->tp.flags & TP_FLAG_PROFILE)
		kprobe_perf_func(tk, regs);
1279
#endif
1280 1281
	return 0;	/* We don't tweek kernel, so just return 0 */
}
1282
NOKPROBE_SYMBOL(kprobe_dispatcher);
1283

1284 1285
static int
kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs)
1286
{
1287
	struct trace_kprobe *tk = container_of(ri->rp, struct trace_kprobe, rp);
1288

1289
	raw_cpu_inc(*tk->nhit);
1290

1291 1292
	if (tk->tp.flags & TP_FLAG_TRACE)
		kretprobe_trace_func(tk, ri, regs);
1293
#ifdef CONFIG_PERF_EVENTS
1294 1295
	if (tk->tp.flags & TP_FLAG_PROFILE)
		kretprobe_perf_func(tk, ri, regs);
1296
#endif
1297 1298
	return 0;	/* We don't tweek kernel, so just return 0 */
}
1299
NOKPROBE_SYMBOL(kretprobe_dispatcher);
1300

1301 1302 1303 1304 1305 1306 1307 1308
static struct trace_event_functions kretprobe_funcs = {
	.trace		= print_kretprobe_event
};

static struct trace_event_functions kprobe_funcs = {
	.trace		= print_kprobe_event
};

1309
static int register_kprobe_event(struct trace_kprobe *tk)
1310
{
1311
	struct trace_event_call *call = &tk->tp.call;
1312 1313
	int ret;

1314
	/* Initialize trace_event_call */
1315
	INIT_LIST_HEAD(&call->class->fields);
1316
	if (trace_kprobe_is_return(tk)) {
1317
		call->event.funcs = &kretprobe_funcs;
1318
		call->class->define_fields = kretprobe_event_define_fields;
1319
	} else {
1320
		call->event.funcs = &kprobe_funcs;
1321
		call->class->define_fields = kprobe_event_define_fields;
1322
	}
1323
	if (set_print_fmt(&tk->tp, trace_kprobe_is_return(tk)) < 0)
1324
		return -ENOMEM;
1325
	ret = register_trace_event(&call->event);
1326
	if (!ret) {
1327
		kfree(call->print_fmt);
1328
		return -ENODEV;
1329
	}
A
Alexei Starovoitov 已提交
1330
	call->flags = TRACE_EVENT_FL_KPROBE;
1331
	call->class->reg = kprobe_register;
1332
	call->data = tk;
1333
	ret = trace_add_event_call(call);
1334
	if (ret) {
1335
		pr_info("Failed to register kprobe event: %s\n",
1336
			trace_event_name(call));
1337
		kfree(call->print_fmt);
1338
		unregister_trace_event(&call->event);
1339
	}
1340 1341 1342
	return ret;
}

1343
static int unregister_kprobe_event(struct trace_kprobe *tk)
1344
{
1345 1346
	int ret;

1347
	/* tp->event is unregistered in trace_remove_event_call() */
1348
	ret = trace_remove_event_call(&tk->tp.call);
1349
	if (!ret)
1350
		kfree(tk->tp.call.print_fmt);
1351
	return ret;
1352 1353
}

1354
/* Make a tracefs interface for controlling probe points */
1355 1356 1357 1358 1359
static __init int init_kprobe_trace(void)
{
	struct dentry *d_tracer;
	struct dentry *entry;

1360
	if (register_module_notifier(&trace_kprobe_module_nb))
1361 1362
		return -EINVAL;

1363
	d_tracer = tracing_init_dentry();
1364
	if (IS_ERR(d_tracer))
1365 1366
		return 0;

1367
	entry = tracefs_create_file("kprobe_events", 0644, d_tracer,
1368 1369
				    NULL, &kprobe_events_ops);

1370
	/* Event list interface */
1371
	if (!entry)
1372
		pr_warn("Could not create tracefs 'kprobe_events' entry\n");
1373 1374

	/* Profile interface */
1375
	entry = tracefs_create_file("kprobe_profile", 0444, d_tracer,
1376 1377 1378
				    NULL, &kprobe_profile_ops);

	if (!entry)
1379
		pr_warn("Could not create tracefs 'kprobe_profile' entry\n");
1380 1381 1382 1383 1384 1385
	return 0;
}
fs_initcall(init_kprobe_trace);


#ifdef CONFIG_FTRACE_STARTUP_TEST
1386 1387
/*
 * The "__used" keeps gcc from removing the function symbol
1388 1389
 * from the kallsyms table. 'noinline' makes sure that there
 * isn't an inlined version used by the test method below
1390
 */
1391 1392
static __used __init noinline int
kprobe_trace_selftest_target(int a1, int a2, int a3, int a4, int a5, int a6)
1393 1394 1395 1396
{
	return a1 + a2 + a3 + a4 + a5 + a6;
}

1397
static __init struct trace_event_file *
1398
find_trace_probe_file(struct trace_kprobe *tk, struct trace_array *tr)
1399
{
1400
	struct trace_event_file *file;
1401 1402

	list_for_each_entry(file, &tr->events, list)
1403
		if (file->event_call == &tk->tp.call)
1404 1405 1406 1407 1408
			return file;

	return NULL;
}

1409
/*
1410
 * Nobody but us can call enable_trace_kprobe/disable_trace_kprobe at this
1411 1412
 * stage, we can do this lockless.
 */
1413 1414
static __init int kprobe_trace_self_tests_init(void)
{
1415
	int ret, warn = 0;
1416
	int (*target)(int, int, int, int, int, int);
1417
	struct trace_kprobe *tk;
1418
	struct trace_event_file *file;
1419

1420 1421 1422
	if (tracing_is_disabled())
		return -ENODEV;

1423 1424 1425 1426
	target = kprobe_trace_selftest_target;

	pr_info("Testing kprobe tracing: ");

1427 1428
	ret = traceprobe_command("p:testprobe kprobe_trace_selftest_target "
				  "$stack $stack0 +0($stack)",
1429
				  create_trace_kprobe);
1430
	if (WARN_ON_ONCE(ret)) {
1431
		pr_warn("error on probing function entry.\n");
1432 1433 1434
		warn++;
	} else {
		/* Enable trace point */
1435 1436
		tk = find_trace_kprobe("testprobe", KPROBE_EVENT_SYSTEM);
		if (WARN_ON_ONCE(tk == NULL)) {
1437
			pr_warn("error on getting new probe.\n");
1438
			warn++;
1439
		} else {
1440
			file = find_trace_probe_file(tk, top_trace_array());
1441 1442 1443 1444
			if (WARN_ON_ONCE(file == NULL)) {
				pr_warn("error on getting probe file.\n");
				warn++;
			} else
1445
				enable_trace_kprobe(tk, file);
1446
		}
1447
	}
1448

1449
	ret = traceprobe_command("r:testprobe2 kprobe_trace_selftest_target "
1450
				  "$retval", create_trace_kprobe);
1451
	if (WARN_ON_ONCE(ret)) {
1452
		pr_warn("error on probing function return.\n");
1453 1454 1455
		warn++;
	} else {
		/* Enable trace point */
1456 1457
		tk = find_trace_kprobe("testprobe2", KPROBE_EVENT_SYSTEM);
		if (WARN_ON_ONCE(tk == NULL)) {
1458
			pr_warn("error on getting 2nd new probe.\n");
1459
			warn++;
1460
		} else {
1461
			file = find_trace_probe_file(tk, top_trace_array());
1462 1463 1464 1465
			if (WARN_ON_ONCE(file == NULL)) {
				pr_warn("error on getting probe file.\n");
				warn++;
			} else
1466
				enable_trace_kprobe(tk, file);
1467
		}
1468 1469 1470 1471
	}

	if (warn)
		goto end;
1472 1473 1474

	ret = target(1, 2, 3, 4, 5, 6);

1475 1476 1477 1478 1479 1480 1481 1482
	/*
	 * Not expecting an error here, the check is only to prevent the
	 * optimizer from removing the call to target() as otherwise there
	 * are no side-effects and the call is never performed.
	 */
	if (ret != 21)
		warn++;

1483
	/* Disable trace points before removing it */
1484 1485
	tk = find_trace_kprobe("testprobe", KPROBE_EVENT_SYSTEM);
	if (WARN_ON_ONCE(tk == NULL)) {
1486
		pr_warn("error on getting test probe.\n");
1487
		warn++;
1488
	} else {
1489 1490 1491 1492 1493
		if (trace_kprobe_nhit(tk) != 1) {
			pr_warn("incorrect number of testprobe hits\n");
			warn++;
		}

1494
		file = find_trace_probe_file(tk, top_trace_array());
1495 1496 1497 1498
		if (WARN_ON_ONCE(file == NULL)) {
			pr_warn("error on getting probe file.\n");
			warn++;
		} else
1499
			disable_trace_kprobe(tk, file);
1500
	}
1501

1502 1503
	tk = find_trace_kprobe("testprobe2", KPROBE_EVENT_SYSTEM);
	if (WARN_ON_ONCE(tk == NULL)) {
1504
		pr_warn("error on getting 2nd test probe.\n");
1505
		warn++;
1506
	} else {
1507 1508 1509 1510 1511
		if (trace_kprobe_nhit(tk) != 1) {
			pr_warn("incorrect number of testprobe2 hits\n");
			warn++;
		}

1512
		file = find_trace_probe_file(tk, top_trace_array());
1513 1514 1515 1516
		if (WARN_ON_ONCE(file == NULL)) {
			pr_warn("error on getting probe file.\n");
			warn++;
		} else
1517
			disable_trace_kprobe(tk, file);
1518
	}
1519

1520
	ret = traceprobe_command("-:testprobe", create_trace_kprobe);
1521
	if (WARN_ON_ONCE(ret)) {
1522
		pr_warn("error on deleting a probe.\n");
1523 1524 1525
		warn++;
	}

1526
	ret = traceprobe_command("-:testprobe2", create_trace_kprobe);
1527
	if (WARN_ON_ONCE(ret)) {
1528
		pr_warn("error on deleting a probe.\n");
1529 1530
		warn++;
	}
1531

1532
end:
1533
	release_all_trace_kprobes();
1534 1535 1536 1537 1538
	/*
	 * Wait for the optimizer work to finish. Otherwise it might fiddle
	 * with probes in already freed __init text.
	 */
	wait_for_kprobe_optimizer();
1539 1540 1541 1542
	if (warn)
		pr_cont("NG: Some tests are failed. Please check them.\n");
	else
		pr_cont("OK\n");
1543 1544 1545 1546 1547 1548
	return 0;
}

late_initcall(kprobe_trace_self_tests_init);

#endif