]> git.ipfire.org Git - people/arne_f/kernel.git/blame - kernel/kprobes.c
timekeeping: Repair ktime_get_coarse*() granularity
[people/arne_f/kernel.git] / kernel / kprobes.c
CommitLineData
1da177e4
LT
1/*
2 * Kernel Probes (KProbes)
3 * kernel/kprobes.c
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
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 * Copyright (C) IBM Corporation, 2002, 2004
20 *
21 * 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
22 * Probes initial implementation (includes suggestions from
23 * Rusty Russell).
24 * 2004-Aug Updated by Prasanna S Panchamukhi <prasanna@in.ibm.com> with
25 * hlists and exceptions notifier as suggested by Andi Kleen.
26 * 2004-July Suparna Bhattacharya <suparna@in.ibm.com> added jumper probes
27 * interface to access function arguments.
28 * 2004-Sep Prasanna S Panchamukhi <prasanna@in.ibm.com> Changed Kprobes
29 * exceptions notifier to be first on the priority list.
b94cce92
HN
30 * 2005-May Hien Nguyen <hien@us.ibm.com>, Jim Keniston
31 * <jkenisto@us.ibm.com> and Prasanna S Panchamukhi
32 * <prasanna@in.ibm.com> added function-return probes.
1da177e4
LT
33 */
34#include <linux/kprobes.h>
1da177e4
LT
35#include <linux/hash.h>
36#include <linux/init.h>
4e57b681 37#include <linux/slab.h>
e3869792 38#include <linux/stddef.h>
9984de1a 39#include <linux/export.h>
9ec4b1f3 40#include <linux/moduleloader.h>
3a872d89 41#include <linux/kallsyms.h>
b4c6c34a 42#include <linux/freezer.h>
346fd59b
SD
43#include <linux/seq_file.h>
44#include <linux/debugfs.h>
b2be84df 45#include <linux/sysctl.h>
1eeb66a1 46#include <linux/kdebug.h>
4460fdad 47#include <linux/memory.h>
4554dbcb 48#include <linux/ftrace.h>
afd66255 49#include <linux/cpu.h>
bf5438fc 50#include <linux/jump_label.h>
bf8f6e5b 51
bfd45be0 52#include <asm/sections.h>
1da177e4
LT
53#include <asm/cacheflush.h>
54#include <asm/errno.h>
7c0f6ba6 55#include <linux/uaccess.h>
1da177e4
LT
56
57#define KPROBE_HASH_BITS 6
58#define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
59
3a872d89 60
ef53d9c5 61static int kprobes_initialized;
1da177e4 62static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
b94cce92 63static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
1da177e4 64
bf8f6e5b 65/* NOTE: change this value only with kprobe_mutex held */
e579abeb 66static bool kprobes_all_disarmed;
bf8f6e5b 67
43948f50
MH
68/* This protects kprobe_table and optimizing_list */
69static DEFINE_MUTEX(kprobe_mutex);
e6584523 70static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL;
ef53d9c5 71static struct {
ec484608 72 raw_spinlock_t lock ____cacheline_aligned_in_smp;
ef53d9c5
S
73} kretprobe_table_locks[KPROBE_TABLE_SIZE];
74
290e3070
NR
75kprobe_opcode_t * __weak kprobe_lookup_name(const char *name,
76 unsigned int __unused)
49e0b465
NR
77{
78 return ((kprobe_opcode_t *)(kallsyms_lookup_name(name)));
79}
80
ec484608 81static raw_spinlock_t *kretprobe_table_lock_ptr(unsigned long hash)
ef53d9c5
S
82{
83 return &(kretprobe_table_locks[hash].lock);
84}
1da177e4 85
376e2424
MH
86/* Blacklist -- list of struct kprobe_blacklist_entry */
87static LIST_HEAD(kprobe_blacklist);
3d8d996e 88
2d14e39d 89#ifdef __ARCH_WANT_KPROBES_INSN_SLOT
9ec4b1f3
AM
90/*
91 * kprobe->ainsn.insn points to the copy of the instruction to be
92 * single-stepped. x86_64, POWER4 and above have no-exec support and
93 * stepping on the instruction on a vmalloced/kmalloced/data page
94 * is a recipe for disaster
95 */
9ec4b1f3 96struct kprobe_insn_page {
c5cb5a2d 97 struct list_head list;
9ec4b1f3 98 kprobe_opcode_t *insns; /* Page of instruction slots */
af96397d 99 struct kprobe_insn_cache *cache;
9ec4b1f3 100 int nused;
b4c6c34a 101 int ngarbage;
4610ee1d 102 char slot_used[];
9ec4b1f3
AM
103};
104
4610ee1d
MH
105#define KPROBE_INSN_PAGE_SIZE(slots) \
106 (offsetof(struct kprobe_insn_page, slot_used) + \
107 (sizeof(char) * (slots)))
108
4610ee1d
MH
109static int slots_per_page(struct kprobe_insn_cache *c)
110{
111 return PAGE_SIZE/(c->insn_size * sizeof(kprobe_opcode_t));
112}
113
ab40c5c6
MH
114enum kprobe_slot_state {
115 SLOT_CLEAN = 0,
116 SLOT_DIRTY = 1,
117 SLOT_USED = 2,
118};
119
63fef14f 120void __weak *alloc_insn_page(void)
af96397d
HC
121{
122 return module_alloc(PAGE_SIZE);
123}
124
c93f5cf5 125void __weak free_insn_page(void *page)
af96397d 126{
be1f221c 127 module_memfree(page);
af96397d
HC
128}
129
c802d64a
HC
130struct kprobe_insn_cache kprobe_insn_slots = {
131 .mutex = __MUTEX_INITIALIZER(kprobe_insn_slots.mutex),
af96397d
HC
132 .alloc = alloc_insn_page,
133 .free = free_insn_page,
4610ee1d
MH
134 .pages = LIST_HEAD_INIT(kprobe_insn_slots.pages),
135 .insn_size = MAX_INSN_SIZE,
136 .nr_garbage = 0,
137};
55479f64 138static int collect_garbage_slots(struct kprobe_insn_cache *c);
b4c6c34a 139
9ec4b1f3 140/**
12941560 141 * __get_insn_slot() - Find a slot on an executable page for an instruction.
9ec4b1f3
AM
142 * We allocate an executable page if there's no room on existing ones.
143 */
55479f64 144kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c)
9ec4b1f3
AM
145{
146 struct kprobe_insn_page *kip;
c802d64a 147 kprobe_opcode_t *slot = NULL;
9ec4b1f3 148
5b485629 149 /* Since the slot array is not protected by rcu, we need a mutex */
c802d64a 150 mutex_lock(&c->mutex);
6f716acd 151 retry:
5b485629
MH
152 rcu_read_lock();
153 list_for_each_entry_rcu(kip, &c->pages, list) {
4610ee1d 154 if (kip->nused < slots_per_page(c)) {
9ec4b1f3 155 int i;
4610ee1d 156 for (i = 0; i < slots_per_page(c); i++) {
ab40c5c6
MH
157 if (kip->slot_used[i] == SLOT_CLEAN) {
158 kip->slot_used[i] = SLOT_USED;
9ec4b1f3 159 kip->nused++;
c802d64a 160 slot = kip->insns + (i * c->insn_size);
5b485629 161 rcu_read_unlock();
c802d64a 162 goto out;
9ec4b1f3
AM
163 }
164 }
4610ee1d
MH
165 /* kip->nused is broken. Fix it. */
166 kip->nused = slots_per_page(c);
167 WARN_ON(1);
9ec4b1f3
AM
168 }
169 }
5b485629 170 rcu_read_unlock();
9ec4b1f3 171
b4c6c34a 172 /* If there are any garbage slots, collect it and try again. */
4610ee1d 173 if (c->nr_garbage && collect_garbage_slots(c) == 0)
b4c6c34a 174 goto retry;
4610ee1d
MH
175
176 /* All out of space. Need to allocate a new page. */
177 kip = kmalloc(KPROBE_INSN_PAGE_SIZE(slots_per_page(c)), GFP_KERNEL);
6f716acd 178 if (!kip)
c802d64a 179 goto out;
9ec4b1f3
AM
180
181 /*
182 * Use module_alloc so this page is within +/- 2GB of where the
183 * kernel image and loaded module images reside. This is required
184 * so x86_64 can correctly handle the %rip-relative fixups.
185 */
af96397d 186 kip->insns = c->alloc();
9ec4b1f3
AM
187 if (!kip->insns) {
188 kfree(kip);
c802d64a 189 goto out;
9ec4b1f3 190 }
c5cb5a2d 191 INIT_LIST_HEAD(&kip->list);
4610ee1d 192 memset(kip->slot_used, SLOT_CLEAN, slots_per_page(c));
ab40c5c6 193 kip->slot_used[0] = SLOT_USED;
9ec4b1f3 194 kip->nused = 1;
b4c6c34a 195 kip->ngarbage = 0;
af96397d 196 kip->cache = c;
5b485629 197 list_add_rcu(&kip->list, &c->pages);
c802d64a
HC
198 slot = kip->insns;
199out:
200 mutex_unlock(&c->mutex);
201 return slot;
12941560
MH
202}
203
b4c6c34a 204/* Return 1 if all garbages are collected, otherwise 0. */
55479f64 205static int collect_one_slot(struct kprobe_insn_page *kip, int idx)
b4c6c34a 206{
ab40c5c6 207 kip->slot_used[idx] = SLOT_CLEAN;
b4c6c34a
MH
208 kip->nused--;
209 if (kip->nused == 0) {
210 /*
211 * Page is no longer in use. Free it unless
212 * it's the last one. We keep the last one
213 * so as not to have to set it up again the
214 * next time somebody inserts a probe.
215 */
4610ee1d 216 if (!list_is_singular(&kip->list)) {
5b485629
MH
217 list_del_rcu(&kip->list);
218 synchronize_rcu();
af96397d 219 kip->cache->free(kip->insns);
b4c6c34a
MH
220 kfree(kip);
221 }
222 return 1;
223 }
224 return 0;
225}
226
55479f64 227static int collect_garbage_slots(struct kprobe_insn_cache *c)
b4c6c34a 228{
c5cb5a2d 229 struct kprobe_insn_page *kip, *next;
b4c6c34a 230
615d0ebb
MH
231 /* Ensure no-one is interrupted on the garbages */
232 synchronize_sched();
b4c6c34a 233
4610ee1d 234 list_for_each_entry_safe(kip, next, &c->pages, list) {
b4c6c34a 235 int i;
b4c6c34a
MH
236 if (kip->ngarbage == 0)
237 continue;
238 kip->ngarbage = 0; /* we will collect all garbages */
4610ee1d 239 for (i = 0; i < slots_per_page(c); i++) {
5b485629 240 if (kip->slot_used[i] == SLOT_DIRTY && collect_one_slot(kip, i))
b4c6c34a
MH
241 break;
242 }
243 }
4610ee1d 244 c->nr_garbage = 0;
b4c6c34a
MH
245 return 0;
246}
247
55479f64
MH
248void __free_insn_slot(struct kprobe_insn_cache *c,
249 kprobe_opcode_t *slot, int dirty)
9ec4b1f3
AM
250{
251 struct kprobe_insn_page *kip;
5b485629 252 long idx;
9ec4b1f3 253
c802d64a 254 mutex_lock(&c->mutex);
5b485629
MH
255 rcu_read_lock();
256 list_for_each_entry_rcu(kip, &c->pages, list) {
257 idx = ((long)slot - (long)kip->insns) /
258 (c->insn_size * sizeof(kprobe_opcode_t));
259 if (idx >= 0 && idx < slots_per_page(c))
c802d64a 260 goto out;
9ec4b1f3 261 }
5b485629 262 /* Could not find this slot. */
4610ee1d 263 WARN_ON(1);
5b485629 264 kip = NULL;
c802d64a 265out:
5b485629
MH
266 rcu_read_unlock();
267 /* Mark and sweep: this may sleep */
268 if (kip) {
269 /* Check double free */
270 WARN_ON(kip->slot_used[idx] != SLOT_USED);
271 if (dirty) {
272 kip->slot_used[idx] = SLOT_DIRTY;
273 kip->ngarbage++;
274 if (++c->nr_garbage > slots_per_page(c))
275 collect_garbage_slots(c);
276 } else {
277 collect_one_slot(kip, idx);
278 }
279 }
c802d64a 280 mutex_unlock(&c->mutex);
4610ee1d 281}
6f716acd 282
5b485629
MH
283/*
284 * Check given address is on the page of kprobe instruction slots.
285 * This will be used for checking whether the address on a stack
286 * is on a text area or not.
287 */
288bool __is_insn_slot_addr(struct kprobe_insn_cache *c, unsigned long addr)
289{
290 struct kprobe_insn_page *kip;
291 bool ret = false;
292
293 rcu_read_lock();
294 list_for_each_entry_rcu(kip, &c->pages, list) {
295 if (addr >= (unsigned long)kip->insns &&
296 addr < (unsigned long)kip->insns + PAGE_SIZE) {
297 ret = true;
298 break;
299 }
300 }
301 rcu_read_unlock();
302
303 return ret;
304}
305
afd66255
MH
306#ifdef CONFIG_OPTPROBES
307/* For optimized_kprobe buffer */
c802d64a
HC
308struct kprobe_insn_cache kprobe_optinsn_slots = {
309 .mutex = __MUTEX_INITIALIZER(kprobe_optinsn_slots.mutex),
af96397d
HC
310 .alloc = alloc_insn_page,
311 .free = free_insn_page,
afd66255
MH
312 .pages = LIST_HEAD_INIT(kprobe_optinsn_slots.pages),
313 /* .insn_size is initialized later */
314 .nr_garbage = 0,
315};
afd66255 316#endif
2d14e39d 317#endif
9ec4b1f3 318
e6584523
AM
319/* We have preemption disabled.. so it is safe to use __ versions */
320static inline void set_kprobe_instance(struct kprobe *kp)
321{
b76834bc 322 __this_cpu_write(kprobe_instance, kp);
e6584523
AM
323}
324
325static inline void reset_kprobe_instance(void)
326{
b76834bc 327 __this_cpu_write(kprobe_instance, NULL);
e6584523
AM
328}
329
3516a460
AM
330/*
331 * This routine is called either:
49a2a1b8 332 * - under the kprobe_mutex - during kprobe_[un]register()
3516a460 333 * OR
d217d545 334 * - with preemption disabled - from arch/xxx/kernel/kprobes.c
3516a460 335 */
820aede0 336struct kprobe *get_kprobe(void *addr)
1da177e4
LT
337{
338 struct hlist_head *head;
3516a460 339 struct kprobe *p;
1da177e4
LT
340
341 head = &kprobe_table[hash_ptr(addr, KPROBE_HASH_BITS)];
b67bfe0d 342 hlist_for_each_entry_rcu(p, head, hlist) {
1da177e4
LT
343 if (p->addr == addr)
344 return p;
345 }
afd66255 346
1da177e4
LT
347 return NULL;
348}
820aede0 349NOKPROBE_SYMBOL(get_kprobe);
1da177e4 350
820aede0 351static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs);
afd66255
MH
352
353/* Return true if the kprobe is an aggregator */
354static inline int kprobe_aggrprobe(struct kprobe *p)
355{
356 return p->pre_handler == aggr_pre_handler;
357}
358
6274de49
MH
359/* Return true(!0) if the kprobe is unused */
360static inline int kprobe_unused(struct kprobe *p)
361{
362 return kprobe_aggrprobe(p) && kprobe_disabled(p) &&
363 list_empty(&p->list);
364}
365
afd66255
MH
366/*
367 * Keep all fields in the kprobe consistent
368 */
6d8e40a8 369static inline void copy_kprobe(struct kprobe *ap, struct kprobe *p)
afd66255 370{
6d8e40a8
MH
371 memcpy(&p->opcode, &ap->opcode, sizeof(kprobe_opcode_t));
372 memcpy(&p->ainsn, &ap->ainsn, sizeof(struct arch_specific_insn));
afd66255
MH
373}
374
375#ifdef CONFIG_OPTPROBES
b2be84df
MH
376/* NOTE: change this value only with kprobe_mutex held */
377static bool kprobes_allow_optimization;
378
afd66255
MH
379/*
380 * Call all pre_handler on the list, but ignores its return value.
381 * This must be called from arch-dep optimized caller.
382 */
820aede0 383void opt_pre_handler(struct kprobe *p, struct pt_regs *regs)
afd66255
MH
384{
385 struct kprobe *kp;
386
387 list_for_each_entry_rcu(kp, &p->list, list) {
388 if (kp->pre_handler && likely(!kprobe_disabled(kp))) {
389 set_kprobe_instance(kp);
4f3a8714 390 kp->pre_handler(kp, regs);
afd66255
MH
391 }
392 reset_kprobe_instance();
393 }
394}
820aede0 395NOKPROBE_SYMBOL(opt_pre_handler);
afd66255 396
6274de49 397/* Free optimized instructions and optimized_kprobe */
55479f64 398static void free_aggr_kprobe(struct kprobe *p)
6274de49
MH
399{
400 struct optimized_kprobe *op;
401
402 op = container_of(p, struct optimized_kprobe, kp);
403 arch_remove_optimized_kprobe(op);
404 arch_remove_kprobe(p);
405 kfree(op);
406}
407
afd66255
MH
408/* Return true(!0) if the kprobe is ready for optimization. */
409static inline int kprobe_optready(struct kprobe *p)
410{
411 struct optimized_kprobe *op;
412
413 if (kprobe_aggrprobe(p)) {
414 op = container_of(p, struct optimized_kprobe, kp);
415 return arch_prepared_optinsn(&op->optinsn);
416 }
417
418 return 0;
419}
420
6274de49
MH
421/* Return true(!0) if the kprobe is disarmed. Note: p must be on hash list */
422static inline int kprobe_disarmed(struct kprobe *p)
423{
424 struct optimized_kprobe *op;
425
426 /* If kprobe is not aggr/opt probe, just return kprobe is disabled */
427 if (!kprobe_aggrprobe(p))
428 return kprobe_disabled(p);
429
430 op = container_of(p, struct optimized_kprobe, kp);
431
432 return kprobe_disabled(p) && list_empty(&op->list);
433}
434
435/* Return true(!0) if the probe is queued on (un)optimizing lists */
55479f64 436static int kprobe_queued(struct kprobe *p)
6274de49
MH
437{
438 struct optimized_kprobe *op;
439
440 if (kprobe_aggrprobe(p)) {
441 op = container_of(p, struct optimized_kprobe, kp);
442 if (!list_empty(&op->list))
443 return 1;
444 }
445 return 0;
446}
447
afd66255
MH
448/*
449 * Return an optimized kprobe whose optimizing code replaces
450 * instructions including addr (exclude breakpoint).
451 */
55479f64 452static struct kprobe *get_optimized_kprobe(unsigned long addr)
afd66255
MH
453{
454 int i;
455 struct kprobe *p = NULL;
456 struct optimized_kprobe *op;
457
458 /* Don't check i == 0, since that is a breakpoint case. */
459 for (i = 1; !p && i < MAX_OPTIMIZED_LENGTH; i++)
460 p = get_kprobe((void *)(addr - i));
461
462 if (p && kprobe_optready(p)) {
463 op = container_of(p, struct optimized_kprobe, kp);
464 if (arch_within_optimized_kprobe(op, addr))
465 return p;
466 }
467
468 return NULL;
469}
470
471/* Optimization staging list, protected by kprobe_mutex */
472static LIST_HEAD(optimizing_list);
6274de49 473static LIST_HEAD(unoptimizing_list);
7b959fc5 474static LIST_HEAD(freeing_list);
afd66255
MH
475
476static void kprobe_optimizer(struct work_struct *work);
477static DECLARE_DELAYED_WORK(optimizing_work, kprobe_optimizer);
478#define OPTIMIZE_DELAY 5
479
61f4e13f
MH
480/*
481 * Optimize (replace a breakpoint with a jump) kprobes listed on
482 * optimizing_list.
483 */
55479f64 484static void do_optimize_kprobes(void)
afd66255 485{
afd66255
MH
486 /*
487 * The optimization/unoptimization refers online_cpus via
488 * stop_machine() and cpu-hotplug modifies online_cpus.
489 * And same time, text_mutex will be held in cpu-hotplug and here.
490 * This combination can cause a deadlock (cpu-hotplug try to lock
491 * text_mutex but stop_machine can not be done because online_cpus
492 * has been changed)
2d1e38f5 493 * To avoid this deadlock, caller must have locked cpu hotplug
afd66255
MH
494 * for preventing cpu-hotplug outside of text_mutex locking.
495 */
2d1e38f5
TG
496 lockdep_assert_cpus_held();
497
498 /* Optimization never be done when disarmed */
499 if (kprobes_all_disarmed || !kprobes_allow_optimization ||
500 list_empty(&optimizing_list))
501 return;
502
afd66255 503 mutex_lock(&text_mutex);
cd7ebe22 504 arch_optimize_kprobes(&optimizing_list);
afd66255 505 mutex_unlock(&text_mutex);
61f4e13f
MH
506}
507
6274de49
MH
508/*
509 * Unoptimize (replace a jump with a breakpoint and remove the breakpoint
510 * if need) kprobes listed on unoptimizing_list.
511 */
55479f64 512static void do_unoptimize_kprobes(void)
6274de49
MH
513{
514 struct optimized_kprobe *op, *tmp;
515
2d1e38f5
TG
516 /* See comment in do_optimize_kprobes() */
517 lockdep_assert_cpus_held();
518
6274de49
MH
519 /* Unoptimization must be done anytime */
520 if (list_empty(&unoptimizing_list))
521 return;
522
6274de49 523 mutex_lock(&text_mutex);
7b959fc5 524 arch_unoptimize_kprobes(&unoptimizing_list, &freeing_list);
f984ba4e 525 /* Loop free_list for disarming */
7b959fc5 526 list_for_each_entry_safe(op, tmp, &freeing_list, list) {
6274de49
MH
527 /* Disarm probes if marked disabled */
528 if (kprobe_disabled(&op->kp))
529 arch_disarm_kprobe(&op->kp);
530 if (kprobe_unused(&op->kp)) {
531 /*
532 * Remove unused probes from hash list. After waiting
533 * for synchronization, these probes are reclaimed.
534 * (reclaiming is done by do_free_cleaned_kprobes.)
535 */
536 hlist_del_rcu(&op->kp.hlist);
6274de49
MH
537 } else
538 list_del_init(&op->list);
539 }
540 mutex_unlock(&text_mutex);
6274de49
MH
541}
542
543/* Reclaim all kprobes on the free_list */
55479f64 544static void do_free_cleaned_kprobes(void)
6274de49
MH
545{
546 struct optimized_kprobe *op, *tmp;
547
7b959fc5 548 list_for_each_entry_safe(op, tmp, &freeing_list, list) {
6274de49
MH
549 BUG_ON(!kprobe_unused(&op->kp));
550 list_del_init(&op->list);
551 free_aggr_kprobe(&op->kp);
552 }
553}
554
555/* Start optimizer after OPTIMIZE_DELAY passed */
55479f64 556static void kick_kprobe_optimizer(void)
6274de49 557{
ad72b3be 558 schedule_delayed_work(&optimizing_work, OPTIMIZE_DELAY);
6274de49
MH
559}
560
61f4e13f 561/* Kprobe jump optimizer */
55479f64 562static void kprobe_optimizer(struct work_struct *work)
61f4e13f 563{
72ef3794 564 mutex_lock(&kprobe_mutex);
2d1e38f5 565 cpus_read_lock();
61f4e13f
MH
566 /* Lock modules while optimizing kprobes */
567 mutex_lock(&module_mutex);
61f4e13f
MH
568
569 /*
6274de49
MH
570 * Step 1: Unoptimize kprobes and collect cleaned (unused and disarmed)
571 * kprobes before waiting for quiesence period.
572 */
7b959fc5 573 do_unoptimize_kprobes();
6274de49
MH
574
575 /*
a30b85df
MH
576 * Step 2: Wait for quiesence period to ensure all potentially
577 * preempted tasks to have normally scheduled. Because optprobe
578 * may modify multiple instructions, there is a chance that Nth
579 * instruction is preempted. In that case, such tasks can return
580 * to 2nd-Nth byte of jump instruction. This wait is for avoiding it.
581 * Note that on non-preemptive kernel, this is transparently converted
582 * to synchronoze_sched() to wait for all interrupts to have completed.
61f4e13f 583 */
a30b85df 584 synchronize_rcu_tasks();
61f4e13f 585
6274de49 586 /* Step 3: Optimize kprobes after quiesence period */
61f4e13f 587 do_optimize_kprobes();
6274de49
MH
588
589 /* Step 4: Free cleaned kprobes after quiesence period */
7b959fc5 590 do_free_cleaned_kprobes();
6274de49 591
afd66255 592 mutex_unlock(&module_mutex);
2d1e38f5 593 cpus_read_unlock();
72ef3794 594 mutex_unlock(&kprobe_mutex);
6274de49 595
cd7ebe22 596 /* Step 5: Kick optimizer again if needed */
f984ba4e 597 if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
cd7ebe22 598 kick_kprobe_optimizer();
6274de49
MH
599}
600
601/* Wait for completing optimization and unoptimization */
30e7d894 602void wait_for_kprobe_optimizer(void)
6274de49 603{
ad72b3be
TH
604 mutex_lock(&kprobe_mutex);
605
606 while (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list)) {
607 mutex_unlock(&kprobe_mutex);
608
609 /* this will also make optimizing_work execute immmediately */
610 flush_delayed_work(&optimizing_work);
611 /* @optimizing_work might not have been queued yet, relax */
612 cpu_relax();
613
614 mutex_lock(&kprobe_mutex);
615 }
616
617 mutex_unlock(&kprobe_mutex);
afd66255
MH
618}
619
620/* Optimize kprobe if p is ready to be optimized */
55479f64 621static void optimize_kprobe(struct kprobe *p)
afd66255
MH
622{
623 struct optimized_kprobe *op;
624
625 /* Check if the kprobe is disabled or not ready for optimization. */
b2be84df 626 if (!kprobe_optready(p) || !kprobes_allow_optimization ||
afd66255
MH
627 (kprobe_disabled(p) || kprobes_all_disarmed))
628 return;
629
059053a2
MH
630 /* kprobes with post_handler can not be optimized */
631 if (p->post_handler)
afd66255
MH
632 return;
633
634 op = container_of(p, struct optimized_kprobe, kp);
635
636 /* Check there is no other kprobes at the optimized instructions */
637 if (arch_check_optimized_kprobe(op) < 0)
638 return;
639
640 /* Check if it is already optimized. */
641 if (op->kp.flags & KPROBE_FLAG_OPTIMIZED)
642 return;
afd66255 643 op->kp.flags |= KPROBE_FLAG_OPTIMIZED;
6274de49
MH
644
645 if (!list_empty(&op->list))
646 /* This is under unoptimizing. Just dequeue the probe */
647 list_del_init(&op->list);
648 else {
649 list_add(&op->list, &optimizing_list);
650 kick_kprobe_optimizer();
651 }
652}
653
654/* Short cut to direct unoptimizing */
55479f64 655static void force_unoptimize_kprobe(struct optimized_kprobe *op)
6274de49 656{
2d1e38f5 657 lockdep_assert_cpus_held();
6274de49 658 arch_unoptimize_kprobe(op);
6274de49
MH
659 if (kprobe_disabled(&op->kp))
660 arch_disarm_kprobe(&op->kp);
afd66255
MH
661}
662
663/* Unoptimize a kprobe if p is optimized */
55479f64 664static void unoptimize_kprobe(struct kprobe *p, bool force)
afd66255
MH
665{
666 struct optimized_kprobe *op;
667
6274de49
MH
668 if (!kprobe_aggrprobe(p) || kprobe_disarmed(p))
669 return; /* This is not an optprobe nor optimized */
670
671 op = container_of(p, struct optimized_kprobe, kp);
672 if (!kprobe_optimized(p)) {
673 /* Unoptimized or unoptimizing case */
674 if (force && !list_empty(&op->list)) {
675 /*
676 * Only if this is unoptimizing kprobe and forced,
677 * forcibly unoptimize it. (No need to unoptimize
678 * unoptimized kprobe again :)
679 */
afd66255 680 list_del_init(&op->list);
6274de49
MH
681 force_unoptimize_kprobe(op);
682 }
683 return;
684 }
685
686 op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
687 if (!list_empty(&op->list)) {
688 /* Dequeue from the optimization queue */
689 list_del_init(&op->list);
690 return;
691 }
692 /* Optimized kprobe case */
693 if (force)
694 /* Forcibly update the code: this is a special case */
695 force_unoptimize_kprobe(op);
696 else {
697 list_add(&op->list, &unoptimizing_list);
698 kick_kprobe_optimizer();
afd66255
MH
699 }
700}
701
0490cd1f 702/* Cancel unoptimizing for reusing */
82b0f70f 703static int reuse_unused_kprobe(struct kprobe *ap)
0490cd1f
MH
704{
705 struct optimized_kprobe *op;
706
707 BUG_ON(!kprobe_unused(ap));
708 /*
709 * Unused kprobe MUST be on the way of delayed unoptimizing (means
710 * there is still a relative jump) and disabled.
711 */
712 op = container_of(ap, struct optimized_kprobe, kp);
4458515b 713 WARN_ON_ONCE(list_empty(&op->list));
0490cd1f
MH
714 /* Enable the probe again */
715 ap->flags &= ~KPROBE_FLAG_DISABLED;
716 /* Optimize it again (remove from op->list) */
23a926e5
MH
717 if (!kprobe_optready(ap))
718 return -EINVAL;
82b0f70f 719
0490cd1f 720 optimize_kprobe(ap);
82b0f70f 721 return 0;
0490cd1f
MH
722}
723
afd66255 724/* Remove optimized instructions */
55479f64 725static void kill_optimized_kprobe(struct kprobe *p)
afd66255
MH
726{
727 struct optimized_kprobe *op;
728
729 op = container_of(p, struct optimized_kprobe, kp);
6274de49
MH
730 if (!list_empty(&op->list))
731 /* Dequeue from the (un)optimization queue */
afd66255 732 list_del_init(&op->list);
6274de49 733 op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
7b959fc5
MH
734
735 if (kprobe_unused(p)) {
736 /* Enqueue if it is unused */
737 list_add(&op->list, &freeing_list);
738 /*
739 * Remove unused probes from the hash list. After waiting
740 * for synchronization, this probe is reclaimed.
741 * (reclaiming is done by do_free_cleaned_kprobes().)
742 */
743 hlist_del_rcu(&op->kp.hlist);
744 }
745
6274de49 746 /* Don't touch the code, because it is already freed. */
afd66255
MH
747 arch_remove_optimized_kprobe(op);
748}
749
a460246c
MH
750static inline
751void __prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe *p)
752{
753 if (!kprobe_ftrace(p))
754 arch_prepare_optimized_kprobe(op, p);
755}
756
afd66255 757/* Try to prepare optimized instructions */
55479f64 758static void prepare_optimized_kprobe(struct kprobe *p)
afd66255
MH
759{
760 struct optimized_kprobe *op;
761
762 op = container_of(p, struct optimized_kprobe, kp);
a460246c 763 __prepare_optimized_kprobe(op, p);
afd66255
MH
764}
765
afd66255 766/* Allocate new optimized_kprobe and try to prepare optimized instructions */
55479f64 767static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
afd66255
MH
768{
769 struct optimized_kprobe *op;
770
771 op = kzalloc(sizeof(struct optimized_kprobe), GFP_KERNEL);
772 if (!op)
773 return NULL;
774
775 INIT_LIST_HEAD(&op->list);
776 op->kp.addr = p->addr;
a460246c 777 __prepare_optimized_kprobe(op, p);
afd66255
MH
778
779 return &op->kp;
780}
781
55479f64 782static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p);
afd66255
MH
783
784/*
785 * Prepare an optimized_kprobe and optimize it
786 * NOTE: p must be a normal registered kprobe
787 */
55479f64 788static void try_to_optimize_kprobe(struct kprobe *p)
afd66255
MH
789{
790 struct kprobe *ap;
791 struct optimized_kprobe *op;
792
ae6aa16f
MH
793 /* Impossible to optimize ftrace-based kprobe */
794 if (kprobe_ftrace(p))
795 return;
796
25764288 797 /* For preparing optimization, jump_label_text_reserved() is called */
2d1e38f5 798 cpus_read_lock();
25764288
MH
799 jump_label_lock();
800 mutex_lock(&text_mutex);
801
afd66255
MH
802 ap = alloc_aggr_kprobe(p);
803 if (!ap)
25764288 804 goto out;
afd66255
MH
805
806 op = container_of(ap, struct optimized_kprobe, kp);
807 if (!arch_prepared_optinsn(&op->optinsn)) {
808 /* If failed to setup optimizing, fallback to kprobe */
6274de49
MH
809 arch_remove_optimized_kprobe(op);
810 kfree(op);
25764288 811 goto out;
afd66255
MH
812 }
813
814 init_aggr_kprobe(ap, p);
25764288
MH
815 optimize_kprobe(ap); /* This just kicks optimizer thread */
816
817out:
818 mutex_unlock(&text_mutex);
819 jump_label_unlock();
2d1e38f5 820 cpus_read_unlock();
afd66255
MH
821}
822
b2be84df 823#ifdef CONFIG_SYSCTL
55479f64 824static void optimize_all_kprobes(void)
b2be84df
MH
825{
826 struct hlist_head *head;
b2be84df
MH
827 struct kprobe *p;
828 unsigned int i;
829
5c51543b 830 mutex_lock(&kprobe_mutex);
b2be84df
MH
831 /* If optimization is already allowed, just return */
832 if (kprobes_allow_optimization)
5c51543b 833 goto out;
b2be84df 834
2d1e38f5 835 cpus_read_lock();
b2be84df 836 kprobes_allow_optimization = true;
b2be84df
MH
837 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
838 head = &kprobe_table[i];
b67bfe0d 839 hlist_for_each_entry_rcu(p, head, hlist)
b2be84df
MH
840 if (!kprobe_disabled(p))
841 optimize_kprobe(p);
842 }
2d1e38f5 843 cpus_read_unlock();
b2be84df 844 printk(KERN_INFO "Kprobes globally optimized\n");
5c51543b
MH
845out:
846 mutex_unlock(&kprobe_mutex);
b2be84df
MH
847}
848
55479f64 849static void unoptimize_all_kprobes(void)
b2be84df
MH
850{
851 struct hlist_head *head;
b2be84df
MH
852 struct kprobe *p;
853 unsigned int i;
854
5c51543b 855 mutex_lock(&kprobe_mutex);
b2be84df 856 /* If optimization is already prohibited, just return */
5c51543b
MH
857 if (!kprobes_allow_optimization) {
858 mutex_unlock(&kprobe_mutex);
b2be84df 859 return;
5c51543b 860 }
b2be84df 861
2d1e38f5 862 cpus_read_lock();
b2be84df 863 kprobes_allow_optimization = false;
b2be84df
MH
864 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
865 head = &kprobe_table[i];
b67bfe0d 866 hlist_for_each_entry_rcu(p, head, hlist) {
b2be84df 867 if (!kprobe_disabled(p))
6274de49 868 unoptimize_kprobe(p, false);
b2be84df
MH
869 }
870 }
2d1e38f5 871 cpus_read_unlock();
5c51543b
MH
872 mutex_unlock(&kprobe_mutex);
873
6274de49
MH
874 /* Wait for unoptimizing completion */
875 wait_for_kprobe_optimizer();
876 printk(KERN_INFO "Kprobes globally unoptimized\n");
b2be84df
MH
877}
878
5c51543b 879static DEFINE_MUTEX(kprobe_sysctl_mutex);
b2be84df
MH
880int sysctl_kprobes_optimization;
881int proc_kprobes_optimization_handler(struct ctl_table *table, int write,
882 void __user *buffer, size_t *length,
883 loff_t *ppos)
884{
885 int ret;
886
5c51543b 887 mutex_lock(&kprobe_sysctl_mutex);
b2be84df
MH
888 sysctl_kprobes_optimization = kprobes_allow_optimization ? 1 : 0;
889 ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
890
891 if (sysctl_kprobes_optimization)
892 optimize_all_kprobes();
893 else
894 unoptimize_all_kprobes();
5c51543b 895 mutex_unlock(&kprobe_sysctl_mutex);
b2be84df
MH
896
897 return ret;
898}
899#endif /* CONFIG_SYSCTL */
900
6274de49 901/* Put a breakpoint for a probe. Must be called with text_mutex locked */
55479f64 902static void __arm_kprobe(struct kprobe *p)
afd66255 903{
6d8e40a8 904 struct kprobe *_p;
afd66255
MH
905
906 /* Check collision with other optimized kprobes */
6d8e40a8
MH
907 _p = get_optimized_kprobe((unsigned long)p->addr);
908 if (unlikely(_p))
6274de49
MH
909 /* Fallback to unoptimized kprobe */
910 unoptimize_kprobe(_p, true);
afd66255
MH
911
912 arch_arm_kprobe(p);
913 optimize_kprobe(p); /* Try to optimize (add kprobe to a list) */
914}
915
6274de49 916/* Remove the breakpoint of a probe. Must be called with text_mutex locked */
55479f64 917static void __disarm_kprobe(struct kprobe *p, bool reopt)
afd66255 918{
6d8e40a8 919 struct kprobe *_p;
afd66255 920
69d54b91
WN
921 /* Try to unoptimize */
922 unoptimize_kprobe(p, kprobes_all_disarmed);
afd66255 923
6274de49
MH
924 if (!kprobe_queued(p)) {
925 arch_disarm_kprobe(p);
926 /* If another kprobe was blocked, optimize it. */
927 _p = get_optimized_kprobe((unsigned long)p->addr);
928 if (unlikely(_p) && reopt)
929 optimize_kprobe(_p);
930 }
931 /* TODO: reoptimize others after unoptimized this probe */
afd66255
MH
932}
933
934#else /* !CONFIG_OPTPROBES */
935
936#define optimize_kprobe(p) do {} while (0)
6274de49 937#define unoptimize_kprobe(p, f) do {} while (0)
afd66255
MH
938#define kill_optimized_kprobe(p) do {} while (0)
939#define prepare_optimized_kprobe(p) do {} while (0)
940#define try_to_optimize_kprobe(p) do {} while (0)
941#define __arm_kprobe(p) arch_arm_kprobe(p)
6274de49
MH
942#define __disarm_kprobe(p, o) arch_disarm_kprobe(p)
943#define kprobe_disarmed(p) kprobe_disabled(p)
944#define wait_for_kprobe_optimizer() do {} while (0)
afd66255 945
82b0f70f 946static int reuse_unused_kprobe(struct kprobe *ap)
0490cd1f 947{
82b0f70f
MH
948 /*
949 * If the optimized kprobe is NOT supported, the aggr kprobe is
950 * released at the same time that the last aggregated kprobe is
951 * unregistered.
952 * Thus there should be no chance to reuse unused kprobe.
953 */
0490cd1f 954 printk(KERN_ERR "Error: There should be no unused kprobe here.\n");
82b0f70f 955 return -EINVAL;
0490cd1f
MH
956}
957
55479f64 958static void free_aggr_kprobe(struct kprobe *p)
afd66255 959{
6274de49 960 arch_remove_kprobe(p);
afd66255
MH
961 kfree(p);
962}
963
55479f64 964static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
afd66255
MH
965{
966 return kzalloc(sizeof(struct kprobe), GFP_KERNEL);
967}
968#endif /* CONFIG_OPTPROBES */
969
e7dbfe34 970#ifdef CONFIG_KPROBES_ON_FTRACE
ae6aa16f 971static struct ftrace_ops kprobe_ftrace_ops __read_mostly = {
e5253896 972 .func = kprobe_ftrace_handler,
1d70be34 973 .flags = FTRACE_OPS_FL_SAVE_REGS | FTRACE_OPS_FL_IPMODIFY,
ae6aa16f
MH
974};
975static int kprobe_ftrace_enabled;
976
977/* Must ensure p->addr is really on ftrace */
55479f64 978static int prepare_kprobe(struct kprobe *p)
ae6aa16f
MH
979{
980 if (!kprobe_ftrace(p))
981 return arch_prepare_kprobe(p);
982
983 return arch_prepare_kprobe_ftrace(p);
984}
985
986/* Caller must lock kprobe_mutex */
12310e34 987static int arm_kprobe_ftrace(struct kprobe *p)
ae6aa16f 988{
12310e34 989 int ret = 0;
ae6aa16f
MH
990
991 ret = ftrace_set_filter_ip(&kprobe_ftrace_ops,
992 (unsigned long)p->addr, 0, 0);
12310e34 993 if (ret) {
4458515b
MH
994 pr_debug("Failed to arm kprobe-ftrace at %pS (%d)\n",
995 p->addr, ret);
12310e34
JY
996 return ret;
997 }
998
999 if (kprobe_ftrace_enabled == 0) {
ae6aa16f 1000 ret = register_ftrace_function(&kprobe_ftrace_ops);
12310e34
JY
1001 if (ret) {
1002 pr_debug("Failed to init kprobe-ftrace (%d)\n", ret);
1003 goto err_ftrace;
1004 }
ae6aa16f 1005 }
12310e34
JY
1006
1007 kprobe_ftrace_enabled++;
1008 return ret;
1009
1010err_ftrace:
1011 /*
1012 * Note: Since kprobe_ftrace_ops has IPMODIFY set, and ftrace requires a
1013 * non-empty filter_hash for IPMODIFY ops, we're safe from an accidental
1014 * empty filter_hash which would undesirably trace all functions.
1015 */
1016 ftrace_set_filter_ip(&kprobe_ftrace_ops, (unsigned long)p->addr, 1, 0);
1017 return ret;
ae6aa16f
MH
1018}
1019
1020/* Caller must lock kprobe_mutex */
297f9233 1021static int disarm_kprobe_ftrace(struct kprobe *p)
ae6aa16f 1022{
297f9233 1023 int ret = 0;
ae6aa16f 1024
297f9233 1025 if (kprobe_ftrace_enabled == 1) {
ae6aa16f 1026 ret = unregister_ftrace_function(&kprobe_ftrace_ops);
297f9233
JY
1027 if (WARN(ret < 0, "Failed to unregister kprobe-ftrace (%d)\n", ret))
1028 return ret;
ae6aa16f 1029 }
297f9233
JY
1030
1031 kprobe_ftrace_enabled--;
1032
ae6aa16f
MH
1033 ret = ftrace_set_filter_ip(&kprobe_ftrace_ops,
1034 (unsigned long)p->addr, 1, 0);
4458515b
MH
1035 WARN_ONCE(ret < 0, "Failed to disarm kprobe-ftrace at %pS (%d)\n",
1036 p->addr, ret);
297f9233 1037 return ret;
ae6aa16f 1038}
e7dbfe34 1039#else /* !CONFIG_KPROBES_ON_FTRACE */
ae6aa16f 1040#define prepare_kprobe(p) arch_prepare_kprobe(p)
12310e34 1041#define arm_kprobe_ftrace(p) (-ENODEV)
297f9233 1042#define disarm_kprobe_ftrace(p) (-ENODEV)
ae6aa16f
MH
1043#endif
1044
201517a7 1045/* Arm a kprobe with text_mutex */
12310e34 1046static int arm_kprobe(struct kprobe *kp)
201517a7 1047{
12310e34
JY
1048 if (unlikely(kprobe_ftrace(kp)))
1049 return arm_kprobe_ftrace(kp);
1050
2d1e38f5 1051 cpus_read_lock();
201517a7 1052 mutex_lock(&text_mutex);
afd66255 1053 __arm_kprobe(kp);
201517a7 1054 mutex_unlock(&text_mutex);
2d1e38f5 1055 cpus_read_unlock();
12310e34
JY
1056
1057 return 0;
201517a7
MH
1058}
1059
1060/* Disarm a kprobe with text_mutex */
297f9233 1061static int disarm_kprobe(struct kprobe *kp, bool reopt)
201517a7 1062{
297f9233
JY
1063 if (unlikely(kprobe_ftrace(kp)))
1064 return disarm_kprobe_ftrace(kp);
2d1e38f5
TG
1065
1066 cpus_read_lock();
201517a7 1067 mutex_lock(&text_mutex);
ae6aa16f 1068 __disarm_kprobe(kp, reopt);
201517a7 1069 mutex_unlock(&text_mutex);
2d1e38f5 1070 cpus_read_unlock();
297f9233
JY
1071
1072 return 0;
201517a7
MH
1073}
1074
64f562c6
AM
1075/*
1076 * Aggregate handlers for multiple kprobes support - these handlers
1077 * take care of invoking the individual kprobe handlers on p->list
1078 */
820aede0 1079static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
64f562c6
AM
1080{
1081 struct kprobe *kp;
1082
3516a460 1083 list_for_each_entry_rcu(kp, &p->list, list) {
de5bd88d 1084 if (kp->pre_handler && likely(!kprobe_disabled(kp))) {
e6584523 1085 set_kprobe_instance(kp);
8b0914ea
PP
1086 if (kp->pre_handler(kp, regs))
1087 return 1;
64f562c6 1088 }
e6584523 1089 reset_kprobe_instance();
64f562c6
AM
1090 }
1091 return 0;
1092}
820aede0 1093NOKPROBE_SYMBOL(aggr_pre_handler);
64f562c6 1094
820aede0
MH
1095static void aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
1096 unsigned long flags)
64f562c6
AM
1097{
1098 struct kprobe *kp;
1099
3516a460 1100 list_for_each_entry_rcu(kp, &p->list, list) {
de5bd88d 1101 if (kp->post_handler && likely(!kprobe_disabled(kp))) {
e6584523 1102 set_kprobe_instance(kp);
64f562c6 1103 kp->post_handler(kp, regs, flags);
e6584523 1104 reset_kprobe_instance();
64f562c6
AM
1105 }
1106 }
64f562c6 1107}
820aede0 1108NOKPROBE_SYMBOL(aggr_post_handler);
64f562c6 1109
820aede0
MH
1110static int aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
1111 int trapnr)
64f562c6 1112{
b76834bc 1113 struct kprobe *cur = __this_cpu_read(kprobe_instance);
e6584523 1114
64f562c6
AM
1115 /*
1116 * if we faulted "during" the execution of a user specified
1117 * probe handler, invoke just that probe's fault handler
1118 */
e6584523
AM
1119 if (cur && cur->fault_handler) {
1120 if (cur->fault_handler(cur, regs, trapnr))
64f562c6
AM
1121 return 1;
1122 }
1123 return 0;
1124}
820aede0 1125NOKPROBE_SYMBOL(aggr_fault_handler);
64f562c6 1126
bf8d5c52 1127/* Walks the list and increments nmissed count for multiprobe case */
820aede0 1128void kprobes_inc_nmissed_count(struct kprobe *p)
bf8d5c52
KA
1129{
1130 struct kprobe *kp;
afd66255 1131 if (!kprobe_aggrprobe(p)) {
bf8d5c52
KA
1132 p->nmissed++;
1133 } else {
1134 list_for_each_entry_rcu(kp, &p->list, list)
1135 kp->nmissed++;
1136 }
1137 return;
1138}
820aede0 1139NOKPROBE_SYMBOL(kprobes_inc_nmissed_count);
bf8d5c52 1140
820aede0
MH
1141void recycle_rp_inst(struct kretprobe_instance *ri,
1142 struct hlist_head *head)
b94cce92 1143{
ef53d9c5
S
1144 struct kretprobe *rp = ri->rp;
1145
b94cce92
HN
1146 /* remove rp inst off the rprobe_inst_table */
1147 hlist_del(&ri->hlist);
ef53d9c5
S
1148 INIT_HLIST_NODE(&ri->hlist);
1149 if (likely(rp)) {
ec484608 1150 raw_spin_lock(&rp->lock);
ef53d9c5 1151 hlist_add_head(&ri->hlist, &rp->free_instances);
ec484608 1152 raw_spin_unlock(&rp->lock);
b94cce92
HN
1153 } else
1154 /* Unregistering */
99219a3f 1155 hlist_add_head(&ri->hlist, head);
b94cce92 1156}
820aede0 1157NOKPROBE_SYMBOL(recycle_rp_inst);
b94cce92 1158
820aede0 1159void kretprobe_hash_lock(struct task_struct *tsk,
ef53d9c5 1160 struct hlist_head **head, unsigned long *flags)
635c17c2 1161__acquires(hlist_lock)
ef53d9c5
S
1162{
1163 unsigned long hash = hash_ptr(tsk, KPROBE_HASH_BITS);
ec484608 1164 raw_spinlock_t *hlist_lock;
ef53d9c5
S
1165
1166 *head = &kretprobe_inst_table[hash];
1167 hlist_lock = kretprobe_table_lock_ptr(hash);
ec484608 1168 raw_spin_lock_irqsave(hlist_lock, *flags);
ef53d9c5 1169}
820aede0 1170NOKPROBE_SYMBOL(kretprobe_hash_lock);
ef53d9c5 1171
820aede0
MH
1172static void kretprobe_table_lock(unsigned long hash,
1173 unsigned long *flags)
635c17c2 1174__acquires(hlist_lock)
b94cce92 1175{
ec484608
TG
1176 raw_spinlock_t *hlist_lock = kretprobe_table_lock_ptr(hash);
1177 raw_spin_lock_irqsave(hlist_lock, *flags);
ef53d9c5 1178}
820aede0 1179NOKPROBE_SYMBOL(kretprobe_table_lock);
ef53d9c5 1180
820aede0
MH
1181void kretprobe_hash_unlock(struct task_struct *tsk,
1182 unsigned long *flags)
635c17c2 1183__releases(hlist_lock)
ef53d9c5
S
1184{
1185 unsigned long hash = hash_ptr(tsk, KPROBE_HASH_BITS);
ec484608 1186 raw_spinlock_t *hlist_lock;
ef53d9c5
S
1187
1188 hlist_lock = kretprobe_table_lock_ptr(hash);
ec484608 1189 raw_spin_unlock_irqrestore(hlist_lock, *flags);
ef53d9c5 1190}
820aede0 1191NOKPROBE_SYMBOL(kretprobe_hash_unlock);
ef53d9c5 1192
820aede0
MH
1193static void kretprobe_table_unlock(unsigned long hash,
1194 unsigned long *flags)
635c17c2 1195__releases(hlist_lock)
ef53d9c5 1196{
ec484608
TG
1197 raw_spinlock_t *hlist_lock = kretprobe_table_lock_ptr(hash);
1198 raw_spin_unlock_irqrestore(hlist_lock, *flags);
b94cce92 1199}
820aede0 1200NOKPROBE_SYMBOL(kretprobe_table_unlock);
b94cce92 1201
b94cce92 1202/*
c6fd91f0 1203 * This function is called from finish_task_switch when task tk becomes dead,
1204 * so that we can recycle any function-return probe instances associated
1205 * with this task. These left over instances represent probed functions
1206 * that have been called but will never return.
b94cce92 1207 */
820aede0 1208void kprobe_flush_task(struct task_struct *tk)
b94cce92 1209{
62c27be0 1210 struct kretprobe_instance *ri;
99219a3f 1211 struct hlist_head *head, empty_rp;
b67bfe0d 1212 struct hlist_node *tmp;
ef53d9c5 1213 unsigned long hash, flags = 0;
802eae7c 1214
ef53d9c5
S
1215 if (unlikely(!kprobes_initialized))
1216 /* Early boot. kretprobe_table_locks not yet initialized. */
1217 return;
1218
d496aab5 1219 INIT_HLIST_HEAD(&empty_rp);
ef53d9c5
S
1220 hash = hash_ptr(tk, KPROBE_HASH_BITS);
1221 head = &kretprobe_inst_table[hash];
1222 kretprobe_table_lock(hash, &flags);
b67bfe0d 1223 hlist_for_each_entry_safe(ri, tmp, head, hlist) {
62c27be0 1224 if (ri->task == tk)
99219a3f 1225 recycle_rp_inst(ri, &empty_rp);
62c27be0 1226 }
ef53d9c5 1227 kretprobe_table_unlock(hash, &flags);
b67bfe0d 1228 hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
99219a3f 1229 hlist_del(&ri->hlist);
1230 kfree(ri);
1231 }
b94cce92 1232}
820aede0 1233NOKPROBE_SYMBOL(kprobe_flush_task);
b94cce92 1234
b94cce92
HN
1235static inline void free_rp_inst(struct kretprobe *rp)
1236{
1237 struct kretprobe_instance *ri;
b67bfe0d 1238 struct hlist_node *next;
4c4308cb 1239
b67bfe0d 1240 hlist_for_each_entry_safe(ri, next, &rp->free_instances, hlist) {
ef53d9c5 1241 hlist_del(&ri->hlist);
b94cce92
HN
1242 kfree(ri);
1243 }
1244}
1245
820aede0 1246static void cleanup_rp_inst(struct kretprobe *rp)
4a296e07 1247{
ef53d9c5 1248 unsigned long flags, hash;
4a296e07 1249 struct kretprobe_instance *ri;
b67bfe0d 1250 struct hlist_node *next;
ef53d9c5
S
1251 struct hlist_head *head;
1252
4a296e07 1253 /* No race here */
ef53d9c5
S
1254 for (hash = 0; hash < KPROBE_TABLE_SIZE; hash++) {
1255 kretprobe_table_lock(hash, &flags);
1256 head = &kretprobe_inst_table[hash];
b67bfe0d 1257 hlist_for_each_entry_safe(ri, next, head, hlist) {
ef53d9c5
S
1258 if (ri->rp == rp)
1259 ri->rp = NULL;
1260 }
1261 kretprobe_table_unlock(hash, &flags);
4a296e07 1262 }
4a296e07
MH
1263 free_rp_inst(rp);
1264}
820aede0 1265NOKPROBE_SYMBOL(cleanup_rp_inst);
4a296e07 1266
059053a2 1267/* Add the new probe to ap->list */
55479f64 1268static int add_new_kprobe(struct kprobe *ap, struct kprobe *p)
8b0914ea 1269{
de5bd88d 1270 BUG_ON(kprobe_gone(ap) || kprobe_gone(p));
afd66255 1271
059053a2 1272 if (p->post_handler)
6274de49 1273 unoptimize_kprobe(ap, true); /* Fall back to normal kprobe */
afd66255 1274
059053a2 1275 list_add_rcu(&p->list, &ap->list);
b918e5e6
MH
1276 if (p->post_handler && !ap->post_handler)
1277 ap->post_handler = aggr_post_handler;
de5bd88d 1278
8b0914ea
PP
1279 return 0;
1280}
1281
64f562c6
AM
1282/*
1283 * Fill in the required fields of the "manager kprobe". Replace the
1284 * earlier kprobe in the hlist with the manager kprobe
1285 */
55479f64 1286static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
64f562c6 1287{
afd66255 1288 /* Copy p's insn slot to ap */
8b0914ea 1289 copy_kprobe(p, ap);
a9ad965e 1290 flush_insn_slot(ap);
64f562c6 1291 ap->addr = p->addr;
afd66255 1292 ap->flags = p->flags & ~KPROBE_FLAG_OPTIMIZED;
64f562c6 1293 ap->pre_handler = aggr_pre_handler;
64f562c6 1294 ap->fault_handler = aggr_fault_handler;
e8386a0c
MH
1295 /* We don't care the kprobe which has gone. */
1296 if (p->post_handler && !kprobe_gone(p))
36721656 1297 ap->post_handler = aggr_post_handler;
64f562c6
AM
1298
1299 INIT_LIST_HEAD(&ap->list);
afd66255 1300 INIT_HLIST_NODE(&ap->hlist);
64f562c6 1301
afd66255 1302 list_add_rcu(&p->list, &ap->list);
adad0f33 1303 hlist_replace_rcu(&p->hlist, &ap->hlist);
64f562c6
AM
1304}
1305
1306/*
1307 * This is the second or subsequent kprobe at the address - handle
1308 * the intricacies
64f562c6 1309 */
55479f64 1310static int register_aggr_kprobe(struct kprobe *orig_p, struct kprobe *p)
64f562c6
AM
1311{
1312 int ret = 0;
6d8e40a8 1313 struct kprobe *ap = orig_p;
64f562c6 1314
2d1e38f5
TG
1315 cpus_read_lock();
1316
25764288
MH
1317 /* For preparing optimization, jump_label_text_reserved() is called */
1318 jump_label_lock();
25764288
MH
1319 mutex_lock(&text_mutex);
1320
6d8e40a8
MH
1321 if (!kprobe_aggrprobe(orig_p)) {
1322 /* If orig_p is not an aggr_kprobe, create new aggr_kprobe. */
1323 ap = alloc_aggr_kprobe(orig_p);
25764288
MH
1324 if (!ap) {
1325 ret = -ENOMEM;
1326 goto out;
1327 }
6d8e40a8 1328 init_aggr_kprobe(ap, orig_p);
82b0f70f 1329 } else if (kprobe_unused(ap)) {
0490cd1f 1330 /* This probe is going to die. Rescue it */
82b0f70f
MH
1331 ret = reuse_unused_kprobe(ap);
1332 if (ret)
1333 goto out;
1334 }
b918e5e6
MH
1335
1336 if (kprobe_gone(ap)) {
e8386a0c
MH
1337 /*
1338 * Attempting to insert new probe at the same location that
1339 * had a probe in the module vaddr area which already
1340 * freed. So, the instruction slot has already been
1341 * released. We need a new slot for the new probe.
1342 */
b918e5e6 1343 ret = arch_prepare_kprobe(ap);
e8386a0c 1344 if (ret)
b918e5e6
MH
1345 /*
1346 * Even if fail to allocate new slot, don't need to
1347 * free aggr_probe. It will be used next time, or
1348 * freed by unregister_kprobe.
1349 */
25764288 1350 goto out;
de5bd88d 1351
afd66255
MH
1352 /* Prepare optimized instructions if possible. */
1353 prepare_optimized_kprobe(ap);
1354
e8386a0c 1355 /*
de5bd88d
MH
1356 * Clear gone flag to prevent allocating new slot again, and
1357 * set disabled flag because it is not armed yet.
e8386a0c 1358 */
de5bd88d
MH
1359 ap->flags = (ap->flags & ~KPROBE_FLAG_GONE)
1360 | KPROBE_FLAG_DISABLED;
e8386a0c 1361 }
b918e5e6 1362
afd66255 1363 /* Copy ap's insn slot to p */
b918e5e6 1364 copy_kprobe(ap, p);
25764288
MH
1365 ret = add_new_kprobe(ap, p);
1366
1367out:
1368 mutex_unlock(&text_mutex);
25764288 1369 jump_label_unlock();
2d1e38f5 1370 cpus_read_unlock();
25764288
MH
1371
1372 if (ret == 0 && kprobe_disabled(ap) && !kprobe_disabled(p)) {
1373 ap->flags &= ~KPROBE_FLAG_DISABLED;
12310e34 1374 if (!kprobes_all_disarmed) {
25764288 1375 /* Arm the breakpoint again. */
12310e34
JY
1376 ret = arm_kprobe(ap);
1377 if (ret) {
1378 ap->flags |= KPROBE_FLAG_DISABLED;
1379 list_del_rcu(&p->list);
1380 synchronize_sched();
1381 }
1382 }
25764288
MH
1383 }
1384 return ret;
64f562c6
AM
1385}
1386
be8f2743
MH
1387bool __weak arch_within_kprobe_blacklist(unsigned long addr)
1388{
1389 /* The __kprobes marked functions and entry code must not be probed */
1390 return addr >= (unsigned long)__kprobes_text_start &&
1391 addr < (unsigned long)__kprobes_text_end;
1392}
1393
e5779e8e 1394bool within_kprobe_blacklist(unsigned long addr)
d0aaff97 1395{
376e2424 1396 struct kprobe_blacklist_entry *ent;
3d8d996e 1397
be8f2743 1398 if (arch_within_kprobe_blacklist(addr))
376e2424 1399 return true;
3d8d996e
SD
1400 /*
1401 * If there exists a kprobe_blacklist, verify and
1402 * fail any probe registration in the prohibited area
1403 */
376e2424
MH
1404 list_for_each_entry(ent, &kprobe_blacklist, list) {
1405 if (addr >= ent->start_addr && addr < ent->end_addr)
1406 return true;
3d8d996e 1407 }
376e2424
MH
1408
1409 return false;
d0aaff97
PP
1410}
1411
b2a5cd69
MH
1412/*
1413 * If we have a symbol_name argument, look it up and add the offset field
1414 * to it. This way, we can specify a relative address to a symbol.
bc81d48d
MH
1415 * This returns encoded errors if it fails to look up symbol or invalid
1416 * combination of parameters.
b2a5cd69 1417 */
1d585e70
NR
1418static kprobe_opcode_t *_kprobe_addr(kprobe_opcode_t *addr,
1419 const char *symbol_name, unsigned int offset)
b2a5cd69 1420{
1d585e70 1421 if ((symbol_name && addr) || (!symbol_name && !addr))
bc81d48d
MH
1422 goto invalid;
1423
1d585e70 1424 if (symbol_name) {
7246f600 1425 addr = kprobe_lookup_name(symbol_name, offset);
bc81d48d
MH
1426 if (!addr)
1427 return ERR_PTR(-ENOENT);
b2a5cd69
MH
1428 }
1429
1d585e70 1430 addr = (kprobe_opcode_t *)(((char *)addr) + offset);
bc81d48d
MH
1431 if (addr)
1432 return addr;
1433
1434invalid:
1435 return ERR_PTR(-EINVAL);
b2a5cd69
MH
1436}
1437
1d585e70
NR
1438static kprobe_opcode_t *kprobe_addr(struct kprobe *p)
1439{
1440 return _kprobe_addr(p->addr, p->symbol_name, p->offset);
1441}
1442
1f0ab409 1443/* Check passed kprobe is valid and return kprobe in kprobe_table. */
55479f64 1444static struct kprobe *__get_valid_kprobe(struct kprobe *p)
1f0ab409 1445{
6d8e40a8 1446 struct kprobe *ap, *list_p;
1f0ab409 1447
6d8e40a8
MH
1448 ap = get_kprobe(p->addr);
1449 if (unlikely(!ap))
1f0ab409
AM
1450 return NULL;
1451
6d8e40a8
MH
1452 if (p != ap) {
1453 list_for_each_entry_rcu(list_p, &ap->list, list)
1f0ab409
AM
1454 if (list_p == p)
1455 /* kprobe p is a valid probe */
1456 goto valid;
1457 return NULL;
1458 }
1459valid:
6d8e40a8 1460 return ap;
1f0ab409
AM
1461}
1462
1463/* Return error if the kprobe is being re-registered */
1464static inline int check_kprobe_rereg(struct kprobe *p)
1465{
1466 int ret = 0;
1f0ab409
AM
1467
1468 mutex_lock(&kprobe_mutex);
6d8e40a8 1469 if (__get_valid_kprobe(p))
1f0ab409
AM
1470 ret = -EINVAL;
1471 mutex_unlock(&kprobe_mutex);
6d8e40a8 1472
1f0ab409
AM
1473 return ret;
1474}
1475
f7f242ff 1476int __weak arch_check_ftrace_location(struct kprobe *p)
1da177e4 1477{
ae6aa16f
MH
1478 unsigned long ftrace_addr;
1479
ae6aa16f
MH
1480 ftrace_addr = ftrace_location((unsigned long)p->addr);
1481 if (ftrace_addr) {
e7dbfe34 1482#ifdef CONFIG_KPROBES_ON_FTRACE
ae6aa16f
MH
1483 /* Given address is not on the instruction boundary */
1484 if ((unsigned long)p->addr != ftrace_addr)
1485 return -EILSEQ;
ae6aa16f 1486 p->flags |= KPROBE_FLAG_FTRACE;
e7dbfe34 1487#else /* !CONFIG_KPROBES_ON_FTRACE */
ae6aa16f
MH
1488 return -EINVAL;
1489#endif
1490 }
f7f242ff
HC
1491 return 0;
1492}
1493
1494static int check_kprobe_address_safe(struct kprobe *p,
1495 struct module **probed_mod)
1496{
1497 int ret;
1f0ab409 1498
f7f242ff
HC
1499 ret = arch_check_ftrace_location(p);
1500 if (ret)
1501 return ret;
91bad2f8 1502 jump_label_lock();
de31c3ca 1503 preempt_disable();
f7fa6ef0
MH
1504
1505 /* Ensure it is not in reserved area nor out of text */
ec30c5f3 1506 if (!kernel_text_address((unsigned long) p->addr) ||
376e2424 1507 within_kprobe_blacklist((unsigned long) p->addr) ||
f986a499
PN
1508 jump_label_text_reserved(p->addr, p->addr)) {
1509 ret = -EINVAL;
f7fa6ef0 1510 goto out;
f986a499 1511 }
b3e55c72 1512
f7fa6ef0
MH
1513 /* Check if are we probing a module */
1514 *probed_mod = __module_text_address((unsigned long) p->addr);
1515 if (*probed_mod) {
6f716acd 1516 /*
e8386a0c
MH
1517 * We must hold a refcount of the probed module while updating
1518 * its code to prohibit unexpected unloading.
df019b1d 1519 */
f7fa6ef0
MH
1520 if (unlikely(!try_module_get(*probed_mod))) {
1521 ret = -ENOENT;
1522 goto out;
1523 }
de31c3ca 1524
f24659d9
MH
1525 /*
1526 * If the module freed .init.text, we couldn't insert
1527 * kprobes in there.
1528 */
f7fa6ef0
MH
1529 if (within_module_init((unsigned long)p->addr, *probed_mod) &&
1530 (*probed_mod)->state != MODULE_STATE_COMING) {
1531 module_put(*probed_mod);
1532 *probed_mod = NULL;
1533 ret = -ENOENT;
f24659d9 1534 }
df019b1d 1535 }
f7fa6ef0 1536out:
a189d035 1537 preempt_enable();
de31c3ca 1538 jump_label_unlock();
1da177e4 1539
f7fa6ef0
MH
1540 return ret;
1541}
1542
55479f64 1543int register_kprobe(struct kprobe *p)
f7fa6ef0
MH
1544{
1545 int ret;
1546 struct kprobe *old_p;
1547 struct module *probed_mod;
1548 kprobe_opcode_t *addr;
1549
1550 /* Adjust probe address from symbol */
1551 addr = kprobe_addr(p);
1552 if (IS_ERR(addr))
1553 return PTR_ERR(addr);
1554 p->addr = addr;
1555
1556 ret = check_kprobe_rereg(p);
1557 if (ret)
1558 return ret;
1559
1560 /* User can pass only KPROBE_FLAG_DISABLED to register_kprobe */
1561 p->flags &= KPROBE_FLAG_DISABLED;
3516a460 1562 p->nmissed = 0;
9861668f 1563 INIT_LIST_HEAD(&p->list);
afd66255 1564
f7fa6ef0
MH
1565 ret = check_kprobe_address_safe(p, &probed_mod);
1566 if (ret)
1567 return ret;
1568
1569 mutex_lock(&kprobe_mutex);
afd66255 1570
64f562c6
AM
1571 old_p = get_kprobe(p->addr);
1572 if (old_p) {
afd66255 1573 /* Since this may unoptimize old_p, locking text_mutex. */
64f562c6 1574 ret = register_aggr_kprobe(old_p, p);
1da177e4
LT
1575 goto out;
1576 }
1da177e4 1577
2d1e38f5
TG
1578 cpus_read_lock();
1579 /* Prevent text modification */
1580 mutex_lock(&text_mutex);
ae6aa16f 1581 ret = prepare_kprobe(p);
25764288 1582 mutex_unlock(&text_mutex);
2d1e38f5 1583 cpus_read_unlock();
6f716acd 1584 if (ret)
afd66255 1585 goto out;
49a2a1b8 1586
64f562c6 1587 INIT_HLIST_NODE(&p->hlist);
3516a460 1588 hlist_add_head_rcu(&p->hlist,
1da177e4
LT
1589 &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
1590
12310e34
JY
1591 if (!kprobes_all_disarmed && !kprobe_disabled(p)) {
1592 ret = arm_kprobe(p);
1593 if (ret) {
1594 hlist_del_rcu(&p->hlist);
1595 synchronize_sched();
1596 goto out;
1597 }
1598 }
afd66255
MH
1599
1600 /* Try to optimize kprobe */
1601 try_to_optimize_kprobe(p);
1da177e4 1602out:
7a7d1cf9 1603 mutex_unlock(&kprobe_mutex);
49a2a1b8 1604
e8386a0c 1605 if (probed_mod)
df019b1d 1606 module_put(probed_mod);
e8386a0c 1607
1da177e4
LT
1608 return ret;
1609}
99081ab5 1610EXPORT_SYMBOL_GPL(register_kprobe);
1da177e4 1611
6f0f1dd7 1612/* Check if all probes on the aggrprobe are disabled */
55479f64 1613static int aggr_kprobe_disabled(struct kprobe *ap)
6f0f1dd7
MH
1614{
1615 struct kprobe *kp;
1616
1617 list_for_each_entry_rcu(kp, &ap->list, list)
1618 if (!kprobe_disabled(kp))
1619 /*
1620 * There is an active probe on the list.
1621 * We can't disable this ap.
1622 */
1623 return 0;
1624
1625 return 1;
1626}
1627
1628/* Disable one kprobe: Make sure called under kprobe_mutex is locked */
55479f64 1629static struct kprobe *__disable_kprobe(struct kprobe *p)
6f0f1dd7
MH
1630{
1631 struct kprobe *orig_p;
297f9233 1632 int ret;
6f0f1dd7
MH
1633
1634 /* Get an original kprobe for return */
1635 orig_p = __get_valid_kprobe(p);
1636 if (unlikely(orig_p == NULL))
297f9233 1637 return ERR_PTR(-EINVAL);
6f0f1dd7
MH
1638
1639 if (!kprobe_disabled(p)) {
1640 /* Disable probe if it is a child probe */
1641 if (p != orig_p)
1642 p->flags |= KPROBE_FLAG_DISABLED;
1643
1644 /* Try to disarm and disable this/parent probe */
1645 if (p == orig_p || aggr_kprobe_disabled(orig_p)) {
69d54b91
WN
1646 /*
1647 * If kprobes_all_disarmed is set, orig_p
1648 * should have already been disarmed, so
1649 * skip unneed disarming process.
1650 */
297f9233
JY
1651 if (!kprobes_all_disarmed) {
1652 ret = disarm_kprobe(orig_p, true);
1653 if (ret) {
1654 p->flags &= ~KPROBE_FLAG_DISABLED;
1655 return ERR_PTR(ret);
1656 }
1657 }
6f0f1dd7
MH
1658 orig_p->flags |= KPROBE_FLAG_DISABLED;
1659 }
1660 }
1661
1662 return orig_p;
1663}
1664
de5bd88d
MH
1665/*
1666 * Unregister a kprobe without a scheduler synchronization.
1667 */
55479f64 1668static int __unregister_kprobe_top(struct kprobe *p)
de5bd88d 1669{
6d8e40a8 1670 struct kprobe *ap, *list_p;
de5bd88d 1671
6f0f1dd7
MH
1672 /* Disable kprobe. This will disarm it if needed. */
1673 ap = __disable_kprobe(p);
297f9233
JY
1674 if (IS_ERR(ap))
1675 return PTR_ERR(ap);
de5bd88d 1676
6f0f1dd7 1677 if (ap == p)
bf8f6e5b 1678 /*
6f0f1dd7
MH
1679 * This probe is an independent(and non-optimized) kprobe
1680 * (not an aggrprobe). Remove from the hash list.
bf8f6e5b 1681 */
6f0f1dd7
MH
1682 goto disarmed;
1683
1684 /* Following process expects this probe is an aggrprobe */
1685 WARN_ON(!kprobe_aggrprobe(ap));
1686
6274de49
MH
1687 if (list_is_singular(&ap->list) && kprobe_disarmed(ap))
1688 /*
1689 * !disarmed could be happen if the probe is under delayed
1690 * unoptimizing.
1691 */
6f0f1dd7
MH
1692 goto disarmed;
1693 else {
1694 /* If disabling probe has special handlers, update aggrprobe */
e8386a0c 1695 if (p->post_handler && !kprobe_gone(p)) {
6d8e40a8 1696 list_for_each_entry_rcu(list_p, &ap->list, list) {
9861668f
MH
1697 if ((list_p != p) && (list_p->post_handler))
1698 goto noclean;
1699 }
6d8e40a8 1700 ap->post_handler = NULL;
9861668f
MH
1701 }
1702noclean:
6f0f1dd7
MH
1703 /*
1704 * Remove from the aggrprobe: this path will do nothing in
1705 * __unregister_kprobe_bottom().
1706 */
49a2a1b8 1707 list_del_rcu(&p->list);
6f0f1dd7
MH
1708 if (!kprobe_disabled(ap) && !kprobes_all_disarmed)
1709 /*
1710 * Try to optimize this probe again, because post
1711 * handler may have been changed.
1712 */
1713 optimize_kprobe(ap);
49a2a1b8 1714 }
9861668f 1715 return 0;
6f0f1dd7
MH
1716
1717disarmed:
6274de49 1718 BUG_ON(!kprobe_disarmed(ap));
6f0f1dd7
MH
1719 hlist_del_rcu(&ap->hlist);
1720 return 0;
9861668f 1721}
3516a460 1722
55479f64 1723static void __unregister_kprobe_bottom(struct kprobe *p)
9861668f 1724{
6d8e40a8 1725 struct kprobe *ap;
b3e55c72 1726
e8386a0c 1727 if (list_empty(&p->list))
6274de49 1728 /* This is an independent kprobe */
0498b635 1729 arch_remove_kprobe(p);
e8386a0c 1730 else if (list_is_singular(&p->list)) {
6274de49 1731 /* This is the last child of an aggrprobe */
6d8e40a8 1732 ap = list_entry(p->list.next, struct kprobe, list);
e8386a0c 1733 list_del(&p->list);
6d8e40a8 1734 free_aggr_kprobe(ap);
9861668f 1735 }
6274de49 1736 /* Otherwise, do nothing. */
9861668f
MH
1737}
1738
55479f64 1739int register_kprobes(struct kprobe **kps, int num)
9861668f
MH
1740{
1741 int i, ret = 0;
1742
1743 if (num <= 0)
1744 return -EINVAL;
1745 for (i = 0; i < num; i++) {
49ad2fd7 1746 ret = register_kprobe(kps[i]);
67dddaad
MH
1747 if (ret < 0) {
1748 if (i > 0)
1749 unregister_kprobes(kps, i);
9861668f 1750 break;
36721656 1751 }
49a2a1b8 1752 }
9861668f
MH
1753 return ret;
1754}
99081ab5 1755EXPORT_SYMBOL_GPL(register_kprobes);
9861668f 1756
55479f64 1757void unregister_kprobe(struct kprobe *p)
9861668f
MH
1758{
1759 unregister_kprobes(&p, 1);
1760}
99081ab5 1761EXPORT_SYMBOL_GPL(unregister_kprobe);
9861668f 1762
55479f64 1763void unregister_kprobes(struct kprobe **kps, int num)
9861668f
MH
1764{
1765 int i;
1766
1767 if (num <= 0)
1768 return;
1769 mutex_lock(&kprobe_mutex);
1770 for (i = 0; i < num; i++)
1771 if (__unregister_kprobe_top(kps[i]) < 0)
1772 kps[i]->addr = NULL;
1773 mutex_unlock(&kprobe_mutex);
1774
1775 synchronize_sched();
1776 for (i = 0; i < num; i++)
1777 if (kps[i]->addr)
1778 __unregister_kprobe_bottom(kps[i]);
1da177e4 1779}
99081ab5 1780EXPORT_SYMBOL_GPL(unregister_kprobes);
1da177e4 1781
5f6bee34
NR
1782int __weak kprobe_exceptions_notify(struct notifier_block *self,
1783 unsigned long val, void *data)
fc62d020
NR
1784{
1785 return NOTIFY_DONE;
1786}
5f6bee34 1787NOKPROBE_SYMBOL(kprobe_exceptions_notify);
fc62d020 1788
1da177e4 1789static struct notifier_block kprobe_exceptions_nb = {
3d5631e0
AK
1790 .notifier_call = kprobe_exceptions_notify,
1791 .priority = 0x7fffffff /* we need to be notified first */
1792};
1793
3d7e3382
ME
1794unsigned long __weak arch_deref_entry_point(void *entry)
1795{
1796 return (unsigned long)entry;
1797}
1da177e4 1798
9edddaa2 1799#ifdef CONFIG_KRETPROBES
e65cefe8
AB
1800/*
1801 * This kprobe pre_handler is registered with every kretprobe. When probe
1802 * hits it will set up the return probe.
1803 */
820aede0 1804static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
e65cefe8
AB
1805{
1806 struct kretprobe *rp = container_of(p, struct kretprobe, kp);
ef53d9c5
S
1807 unsigned long hash, flags = 0;
1808 struct kretprobe_instance *ri;
e65cefe8 1809
f96f5678
MH
1810 /*
1811 * To avoid deadlocks, prohibit return probing in NMI contexts,
1812 * just skip the probe and increase the (inexact) 'nmissed'
1813 * statistical counter, so that the user is informed that
1814 * something happened:
1815 */
1816 if (unlikely(in_nmi())) {
1817 rp->nmissed++;
1818 return 0;
1819 }
1820
1821 /* TODO: consider to only swap the RA after the last pre_handler fired */
ef53d9c5 1822 hash = hash_ptr(current, KPROBE_HASH_BITS);
ec484608 1823 raw_spin_lock_irqsave(&rp->lock, flags);
4c4308cb 1824 if (!hlist_empty(&rp->free_instances)) {
4c4308cb 1825 ri = hlist_entry(rp->free_instances.first,
ef53d9c5
S
1826 struct kretprobe_instance, hlist);
1827 hlist_del(&ri->hlist);
ec484608 1828 raw_spin_unlock_irqrestore(&rp->lock, flags);
ef53d9c5 1829
4c4308cb
CH
1830 ri->rp = rp;
1831 ri->task = current;
f47cd9b5 1832
55ca6140
JL
1833 if (rp->entry_handler && rp->entry_handler(ri, regs)) {
1834 raw_spin_lock_irqsave(&rp->lock, flags);
1835 hlist_add_head(&ri->hlist, &rp->free_instances);
1836 raw_spin_unlock_irqrestore(&rp->lock, flags);
f47cd9b5 1837 return 0;
55ca6140 1838 }
f47cd9b5 1839
4c4308cb
CH
1840 arch_prepare_kretprobe(ri, regs);
1841
1842 /* XXX(hch): why is there no hlist_move_head? */
ef53d9c5
S
1843 INIT_HLIST_NODE(&ri->hlist);
1844 kretprobe_table_lock(hash, &flags);
1845 hlist_add_head(&ri->hlist, &kretprobe_inst_table[hash]);
1846 kretprobe_table_unlock(hash, &flags);
1847 } else {
4c4308cb 1848 rp->nmissed++;
ec484608 1849 raw_spin_unlock_irqrestore(&rp->lock, flags);
ef53d9c5 1850 }
e65cefe8
AB
1851 return 0;
1852}
820aede0 1853NOKPROBE_SYMBOL(pre_handler_kretprobe);
e65cefe8 1854
659b957f 1855bool __weak arch_kprobe_on_func_entry(unsigned long offset)
90ec5e89
NR
1856{
1857 return !offset;
1858}
1859
659b957f 1860bool kprobe_on_func_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset)
1d585e70
NR
1861{
1862 kprobe_opcode_t *kp_addr = _kprobe_addr(addr, sym, offset);
1863
1864 if (IS_ERR(kp_addr))
1865 return false;
1866
1867 if (!kallsyms_lookup_size_offset((unsigned long)kp_addr, NULL, &offset) ||
659b957f 1868 !arch_kprobe_on_func_entry(offset))
1d585e70
NR
1869 return false;
1870
1871 return true;
1872}
1873
55479f64 1874int register_kretprobe(struct kretprobe *rp)
b94cce92
HN
1875{
1876 int ret = 0;
1877 struct kretprobe_instance *inst;
1878 int i;
b2a5cd69 1879 void *addr;
90ec5e89 1880
659b957f 1881 if (!kprobe_on_func_entry(rp->kp.addr, rp->kp.symbol_name, rp->kp.offset))
90ec5e89 1882 return -EINVAL;
f438d914
MH
1883
1884 if (kretprobe_blacklist_size) {
b2a5cd69 1885 addr = kprobe_addr(&rp->kp);
bc81d48d
MH
1886 if (IS_ERR(addr))
1887 return PTR_ERR(addr);
f438d914
MH
1888
1889 for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
1890 if (kretprobe_blacklist[i].addr == addr)
1891 return -EINVAL;
1892 }
1893 }
b94cce92
HN
1894
1895 rp->kp.pre_handler = pre_handler_kretprobe;
7522a842
AM
1896 rp->kp.post_handler = NULL;
1897 rp->kp.fault_handler = NULL;
b94cce92
HN
1898
1899 /* Pre-allocate memory for max kretprobe instances */
1900 if (rp->maxactive <= 0) {
1901#ifdef CONFIG_PREEMPT
c2ef6661 1902 rp->maxactive = max_t(unsigned int, 10, 2*num_possible_cpus());
b94cce92 1903#else
4dae560f 1904 rp->maxactive = num_possible_cpus();
b94cce92
HN
1905#endif
1906 }
ec484608 1907 raw_spin_lock_init(&rp->lock);
b94cce92
HN
1908 INIT_HLIST_HEAD(&rp->free_instances);
1909 for (i = 0; i < rp->maxactive; i++) {
f47cd9b5
AS
1910 inst = kmalloc(sizeof(struct kretprobe_instance) +
1911 rp->data_size, GFP_KERNEL);
b94cce92
HN
1912 if (inst == NULL) {
1913 free_rp_inst(rp);
1914 return -ENOMEM;
1915 }
ef53d9c5
S
1916 INIT_HLIST_NODE(&inst->hlist);
1917 hlist_add_head(&inst->hlist, &rp->free_instances);
b94cce92
HN
1918 }
1919
1920 rp->nmissed = 0;
1921 /* Establish function entry probe point */
49ad2fd7 1922 ret = register_kprobe(&rp->kp);
4a296e07 1923 if (ret != 0)
b94cce92
HN
1924 free_rp_inst(rp);
1925 return ret;
1926}
99081ab5 1927EXPORT_SYMBOL_GPL(register_kretprobe);
b94cce92 1928
55479f64 1929int register_kretprobes(struct kretprobe **rps, int num)
4a296e07
MH
1930{
1931 int ret = 0, i;
1932
1933 if (num <= 0)
1934 return -EINVAL;
1935 for (i = 0; i < num; i++) {
49ad2fd7 1936 ret = register_kretprobe(rps[i]);
67dddaad
MH
1937 if (ret < 0) {
1938 if (i > 0)
1939 unregister_kretprobes(rps, i);
4a296e07
MH
1940 break;
1941 }
1942 }
1943 return ret;
1944}
99081ab5 1945EXPORT_SYMBOL_GPL(register_kretprobes);
4a296e07 1946
55479f64 1947void unregister_kretprobe(struct kretprobe *rp)
4a296e07
MH
1948{
1949 unregister_kretprobes(&rp, 1);
1950}
99081ab5 1951EXPORT_SYMBOL_GPL(unregister_kretprobe);
4a296e07 1952
55479f64 1953void unregister_kretprobes(struct kretprobe **rps, int num)
4a296e07
MH
1954{
1955 int i;
1956
1957 if (num <= 0)
1958 return;
1959 mutex_lock(&kprobe_mutex);
1960 for (i = 0; i < num; i++)
1961 if (__unregister_kprobe_top(&rps[i]->kp) < 0)
1962 rps[i]->kp.addr = NULL;
1963 mutex_unlock(&kprobe_mutex);
1964
1965 synchronize_sched();
1966 for (i = 0; i < num; i++) {
1967 if (rps[i]->kp.addr) {
1968 __unregister_kprobe_bottom(&rps[i]->kp);
1969 cleanup_rp_inst(rps[i]);
1970 }
1971 }
1972}
99081ab5 1973EXPORT_SYMBOL_GPL(unregister_kretprobes);
4a296e07 1974
9edddaa2 1975#else /* CONFIG_KRETPROBES */
55479f64 1976int register_kretprobe(struct kretprobe *rp)
b94cce92
HN
1977{
1978 return -ENOSYS;
1979}
99081ab5 1980EXPORT_SYMBOL_GPL(register_kretprobe);
b94cce92 1981
55479f64 1982int register_kretprobes(struct kretprobe **rps, int num)
346fd59b 1983{
4a296e07 1984 return -ENOSYS;
346fd59b 1985}
99081ab5
MH
1986EXPORT_SYMBOL_GPL(register_kretprobes);
1987
55479f64 1988void unregister_kretprobe(struct kretprobe *rp)
b94cce92 1989{
4a296e07 1990}
99081ab5 1991EXPORT_SYMBOL_GPL(unregister_kretprobe);
b94cce92 1992
55479f64 1993void unregister_kretprobes(struct kretprobe **rps, int num)
4a296e07
MH
1994{
1995}
99081ab5 1996EXPORT_SYMBOL_GPL(unregister_kretprobes);
4c4308cb 1997
820aede0 1998static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
4a296e07
MH
1999{
2000 return 0;
b94cce92 2001}
820aede0 2002NOKPROBE_SYMBOL(pre_handler_kretprobe);
b94cce92 2003
4a296e07
MH
2004#endif /* CONFIG_KRETPROBES */
2005
e8386a0c 2006/* Set the kprobe gone and remove its instruction buffer. */
55479f64 2007static void kill_kprobe(struct kprobe *p)
e8386a0c
MH
2008{
2009 struct kprobe *kp;
de5bd88d 2010
e8386a0c 2011 p->flags |= KPROBE_FLAG_GONE;
afd66255 2012 if (kprobe_aggrprobe(p)) {
e8386a0c
MH
2013 /*
2014 * If this is an aggr_kprobe, we have to list all the
2015 * chained probes and mark them GONE.
2016 */
2017 list_for_each_entry_rcu(kp, &p->list, list)
2018 kp->flags |= KPROBE_FLAG_GONE;
2019 p->post_handler = NULL;
afd66255 2020 kill_optimized_kprobe(p);
e8386a0c
MH
2021 }
2022 /*
2023 * Here, we can remove insn_slot safely, because no thread calls
2024 * the original probed function (which will be freed soon) any more.
2025 */
2026 arch_remove_kprobe(p);
2027}
2028
c0614829 2029/* Disable one kprobe */
55479f64 2030int disable_kprobe(struct kprobe *kp)
c0614829
MH
2031{
2032 int ret = 0;
297f9233 2033 struct kprobe *p;
c0614829
MH
2034
2035 mutex_lock(&kprobe_mutex);
2036
6f0f1dd7 2037 /* Disable this kprobe */
297f9233
JY
2038 p = __disable_kprobe(kp);
2039 if (IS_ERR(p))
2040 ret = PTR_ERR(p);
c0614829 2041
c0614829
MH
2042 mutex_unlock(&kprobe_mutex);
2043 return ret;
2044}
2045EXPORT_SYMBOL_GPL(disable_kprobe);
2046
2047/* Enable one kprobe */
55479f64 2048int enable_kprobe(struct kprobe *kp)
c0614829
MH
2049{
2050 int ret = 0;
2051 struct kprobe *p;
2052
2053 mutex_lock(&kprobe_mutex);
2054
2055 /* Check whether specified probe is valid. */
2056 p = __get_valid_kprobe(kp);
2057 if (unlikely(p == NULL)) {
2058 ret = -EINVAL;
2059 goto out;
2060 }
2061
2062 if (kprobe_gone(kp)) {
2063 /* This kprobe has gone, we couldn't enable it. */
2064 ret = -EINVAL;
2065 goto out;
2066 }
2067
2068 if (p != kp)
2069 kp->flags &= ~KPROBE_FLAG_DISABLED;
2070
2071 if (!kprobes_all_disarmed && kprobe_disabled(p)) {
2072 p->flags &= ~KPROBE_FLAG_DISABLED;
12310e34
JY
2073 ret = arm_kprobe(p);
2074 if (ret)
2075 p->flags |= KPROBE_FLAG_DISABLED;
c0614829
MH
2076 }
2077out:
2078 mutex_unlock(&kprobe_mutex);
2079 return ret;
2080}
2081EXPORT_SYMBOL_GPL(enable_kprobe);
2082
4458515b 2083/* Caller must NOT call this in usual path. This is only for critical case */
820aede0 2084void dump_kprobe(struct kprobe *kp)
24851d24 2085{
4458515b
MH
2086 pr_err("Dumping kprobe:\n");
2087 pr_err("Name: %s\nOffset: %x\nAddress: %pS\n",
2088 kp->symbol_name, kp->offset, kp->addr);
24851d24 2089}
820aede0 2090NOKPROBE_SYMBOL(dump_kprobe);
24851d24 2091
376e2424
MH
2092/*
2093 * Lookup and populate the kprobe_blacklist.
2094 *
2095 * Unlike the kretprobe blacklist, we'll need to determine
2096 * the range of addresses that belong to the said functions,
2097 * since a kprobe need not necessarily be at the beginning
2098 * of a function.
2099 */
2100static int __init populate_kprobe_blacklist(unsigned long *start,
2101 unsigned long *end)
2102{
2103 unsigned long *iter;
2104 struct kprobe_blacklist_entry *ent;
d81b4253 2105 unsigned long entry, offset = 0, size = 0;
376e2424
MH
2106
2107 for (iter = start; iter < end; iter++) {
d81b4253
MH
2108 entry = arch_deref_entry_point((void *)*iter);
2109
2110 if (!kernel_text_address(entry) ||
4458515b 2111 !kallsyms_lookup_size_offset(entry, &size, &offset))
376e2424 2112 continue;
376e2424
MH
2113
2114 ent = kmalloc(sizeof(*ent), GFP_KERNEL);
2115 if (!ent)
2116 return -ENOMEM;
d81b4253
MH
2117 ent->start_addr = entry;
2118 ent->end_addr = entry + size;
376e2424
MH
2119 INIT_LIST_HEAD(&ent->list);
2120 list_add_tail(&ent->list, &kprobe_blacklist);
2121 }
2122 return 0;
2123}
2124
e8386a0c 2125/* Module notifier call back, checking kprobes on the module */
55479f64
MH
2126static int kprobes_module_callback(struct notifier_block *nb,
2127 unsigned long val, void *data)
e8386a0c
MH
2128{
2129 struct module *mod = data;
2130 struct hlist_head *head;
e8386a0c
MH
2131 struct kprobe *p;
2132 unsigned int i;
f24659d9 2133 int checkcore = (val == MODULE_STATE_GOING);
e8386a0c 2134
f24659d9 2135 if (val != MODULE_STATE_GOING && val != MODULE_STATE_LIVE)
e8386a0c
MH
2136 return NOTIFY_DONE;
2137
2138 /*
f24659d9
MH
2139 * When MODULE_STATE_GOING was notified, both of module .text and
2140 * .init.text sections would be freed. When MODULE_STATE_LIVE was
2141 * notified, only .init.text section would be freed. We need to
2142 * disable kprobes which have been inserted in the sections.
e8386a0c
MH
2143 */
2144 mutex_lock(&kprobe_mutex);
2145 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2146 head = &kprobe_table[i];
b67bfe0d 2147 hlist_for_each_entry_rcu(p, head, hlist)
f24659d9
MH
2148 if (within_module_init((unsigned long)p->addr, mod) ||
2149 (checkcore &&
2150 within_module_core((unsigned long)p->addr, mod))) {
e8386a0c
MH
2151 /*
2152 * The vaddr this probe is installed will soon
2153 * be vfreed buy not synced to disk. Hence,
2154 * disarming the breakpoint isn't needed.
545a0281
SRV
2155 *
2156 * Note, this will also move any optimized probes
2157 * that are pending to be removed from their
2158 * corresponding lists to the freeing_list and
2159 * will not be touched by the delayed
2160 * kprobe_optimizer work handler.
e8386a0c
MH
2161 */
2162 kill_kprobe(p);
2163 }
2164 }
2165 mutex_unlock(&kprobe_mutex);
2166 return NOTIFY_DONE;
2167}
2168
2169static struct notifier_block kprobe_module_nb = {
2170 .notifier_call = kprobes_module_callback,
2171 .priority = 0
2172};
2173
376e2424
MH
2174/* Markers of _kprobe_blacklist section */
2175extern unsigned long __start_kprobe_blacklist[];
2176extern unsigned long __stop_kprobe_blacklist[];
2177
1da177e4
LT
2178static int __init init_kprobes(void)
2179{
2180 int i, err = 0;
2181
2182 /* FIXME allocate the probe table, currently defined statically */
2183 /* initialize all list heads */
b94cce92 2184 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1da177e4 2185 INIT_HLIST_HEAD(&kprobe_table[i]);
b94cce92 2186 INIT_HLIST_HEAD(&kretprobe_inst_table[i]);
ec484608 2187 raw_spin_lock_init(&(kretprobe_table_locks[i].lock));
b94cce92 2188 }
1da177e4 2189
376e2424
MH
2190 err = populate_kprobe_blacklist(__start_kprobe_blacklist,
2191 __stop_kprobe_blacklist);
2192 if (err) {
2193 pr_err("kprobes: failed to populate blacklist: %d\n", err);
2194 pr_err("Please take care of using kprobes.\n");
3d8d996e
SD
2195 }
2196
f438d914
MH
2197 if (kretprobe_blacklist_size) {
2198 /* lookup the function address from its name */
2199 for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
49e0b465 2200 kretprobe_blacklist[i].addr =
290e3070 2201 kprobe_lookup_name(kretprobe_blacklist[i].name, 0);
f438d914
MH
2202 if (!kretprobe_blacklist[i].addr)
2203 printk("kretprobe: lookup failed: %s\n",
2204 kretprobe_blacklist[i].name);
2205 }
2206 }
2207
b2be84df
MH
2208#if defined(CONFIG_OPTPROBES)
2209#if defined(__ARCH_WANT_KPROBES_INSN_SLOT)
afd66255
MH
2210 /* Init kprobe_optinsn_slots */
2211 kprobe_optinsn_slots.insn_size = MAX_OPTINSN_SIZE;
2212#endif
b2be84df
MH
2213 /* By default, kprobes can be optimized */
2214 kprobes_allow_optimization = true;
2215#endif
afd66255 2216
e579abeb
MH
2217 /* By default, kprobes are armed */
2218 kprobes_all_disarmed = false;
bf8f6e5b 2219
6772926b 2220 err = arch_init_kprobes();
802eae7c
RL
2221 if (!err)
2222 err = register_die_notifier(&kprobe_exceptions_nb);
e8386a0c
MH
2223 if (!err)
2224 err = register_module_notifier(&kprobe_module_nb);
2225
ef53d9c5 2226 kprobes_initialized = (err == 0);
802eae7c 2227
8c1c9356
AM
2228 if (!err)
2229 init_test_probes();
1da177e4
LT
2230 return err;
2231}
2232
346fd59b 2233#ifdef CONFIG_DEBUG_FS
55479f64 2234static void report_probe(struct seq_file *pi, struct kprobe *p,
afd66255 2235 const char *sym, int offset, char *modname, struct kprobe *pp)
346fd59b
SD
2236{
2237 char *kprobe_type;
81365a94 2238 void *addr = p->addr;
346fd59b
SD
2239
2240 if (p->pre_handler == pre_handler_kretprobe)
2241 kprobe_type = "r";
346fd59b
SD
2242 else
2243 kprobe_type = "k";
afd66255 2244
81365a94
MH
2245 if (!kallsyms_show_value())
2246 addr = NULL;
2247
346fd59b 2248 if (sym)
81365a94
MH
2249 seq_printf(pi, "%px %s %s+0x%x %s ",
2250 addr, kprobe_type, sym, offset,
afd66255 2251 (modname ? modname : " "));
81365a94
MH
2252 else /* try to use %pS */
2253 seq_printf(pi, "%px %s %pS ",
2254 addr, kprobe_type, p->addr);
afd66255
MH
2255
2256 if (!pp)
2257 pp = p;
ae6aa16f 2258 seq_printf(pi, "%s%s%s%s\n",
afd66255
MH
2259 (kprobe_gone(p) ? "[GONE]" : ""),
2260 ((kprobe_disabled(p) && !kprobe_gone(p)) ? "[DISABLED]" : ""),
ae6aa16f
MH
2261 (kprobe_optimized(pp) ? "[OPTIMIZED]" : ""),
2262 (kprobe_ftrace(pp) ? "[FTRACE]" : ""));
346fd59b
SD
2263}
2264
55479f64 2265static void *kprobe_seq_start(struct seq_file *f, loff_t *pos)
346fd59b
SD
2266{
2267 return (*pos < KPROBE_TABLE_SIZE) ? pos : NULL;
2268}
2269
55479f64 2270static void *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos)
346fd59b
SD
2271{
2272 (*pos)++;
2273 if (*pos >= KPROBE_TABLE_SIZE)
2274 return NULL;
2275 return pos;
2276}
2277
55479f64 2278static void kprobe_seq_stop(struct seq_file *f, void *v)
346fd59b
SD
2279{
2280 /* Nothing to do */
2281}
2282
55479f64 2283static int show_kprobe_addr(struct seq_file *pi, void *v)
346fd59b
SD
2284{
2285 struct hlist_head *head;
346fd59b
SD
2286 struct kprobe *p, *kp;
2287 const char *sym = NULL;
2288 unsigned int i = *(loff_t *) v;
ffb45122 2289 unsigned long offset = 0;
ab767865 2290 char *modname, namebuf[KSYM_NAME_LEN];
346fd59b
SD
2291
2292 head = &kprobe_table[i];
2293 preempt_disable();
b67bfe0d 2294 hlist_for_each_entry_rcu(p, head, hlist) {
ffb45122 2295 sym = kallsyms_lookup((unsigned long)p->addr, NULL,
346fd59b 2296 &offset, &modname, namebuf);
afd66255 2297 if (kprobe_aggrprobe(p)) {
346fd59b 2298 list_for_each_entry_rcu(kp, &p->list, list)
afd66255 2299 report_probe(pi, kp, sym, offset, modname, p);
346fd59b 2300 } else
afd66255 2301 report_probe(pi, p, sym, offset, modname, NULL);
346fd59b
SD
2302 }
2303 preempt_enable();
2304 return 0;
2305}
2306
88e9d34c 2307static const struct seq_operations kprobes_seq_ops = {
346fd59b
SD
2308 .start = kprobe_seq_start,
2309 .next = kprobe_seq_next,
2310 .stop = kprobe_seq_stop,
2311 .show = show_kprobe_addr
2312};
2313
55479f64 2314static int kprobes_open(struct inode *inode, struct file *filp)
346fd59b
SD
2315{
2316 return seq_open(filp, &kprobes_seq_ops);
2317}
2318
828c0950 2319static const struct file_operations debugfs_kprobes_operations = {
346fd59b
SD
2320 .open = kprobes_open,
2321 .read = seq_read,
2322 .llseek = seq_lseek,
2323 .release = seq_release,
2324};
2325
63724740
MH
2326/* kprobes/blacklist -- shows which functions can not be probed */
2327static void *kprobe_blacklist_seq_start(struct seq_file *m, loff_t *pos)
2328{
2329 return seq_list_start(&kprobe_blacklist, *pos);
2330}
2331
2332static void *kprobe_blacklist_seq_next(struct seq_file *m, void *v, loff_t *pos)
2333{
2334 return seq_list_next(v, &kprobe_blacklist, pos);
2335}
2336
2337static int kprobe_blacklist_seq_show(struct seq_file *m, void *v)
2338{
2339 struct kprobe_blacklist_entry *ent =
2340 list_entry(v, struct kprobe_blacklist_entry, list);
2341
ffb9bd68
MH
2342 /*
2343 * If /proc/kallsyms is not showing kernel address, we won't
2344 * show them here either.
2345 */
2346 if (!kallsyms_show_value())
2347 seq_printf(m, "0x%px-0x%px\t%ps\n", NULL, NULL,
2348 (void *)ent->start_addr);
2349 else
2350 seq_printf(m, "0x%px-0x%px\t%ps\n", (void *)ent->start_addr,
2351 (void *)ent->end_addr, (void *)ent->start_addr);
63724740
MH
2352 return 0;
2353}
2354
2355static const struct seq_operations kprobe_blacklist_seq_ops = {
2356 .start = kprobe_blacklist_seq_start,
2357 .next = kprobe_blacklist_seq_next,
2358 .stop = kprobe_seq_stop, /* Reuse void function */
2359 .show = kprobe_blacklist_seq_show,
2360};
2361
2362static int kprobe_blacklist_open(struct inode *inode, struct file *filp)
2363{
2364 return seq_open(filp, &kprobe_blacklist_seq_ops);
2365}
2366
2367static const struct file_operations debugfs_kprobe_blacklist_ops = {
2368 .open = kprobe_blacklist_open,
2369 .read = seq_read,
2370 .llseek = seq_lseek,
2371 .release = seq_release,
2372};
2373
12310e34 2374static int arm_all_kprobes(void)
bf8f6e5b
AM
2375{
2376 struct hlist_head *head;
bf8f6e5b 2377 struct kprobe *p;
12310e34
JY
2378 unsigned int i, total = 0, errors = 0;
2379 int err, ret = 0;
bf8f6e5b
AM
2380
2381 mutex_lock(&kprobe_mutex);
2382
e579abeb
MH
2383 /* If kprobes are armed, just return */
2384 if (!kprobes_all_disarmed)
bf8f6e5b
AM
2385 goto already_enabled;
2386
977ad481
WN
2387 /*
2388 * optimize_kprobe() called by arm_kprobe() checks
2389 * kprobes_all_disarmed, so set kprobes_all_disarmed before
2390 * arm_kprobe.
2391 */
2392 kprobes_all_disarmed = false;
afd66255 2393 /* Arming kprobes doesn't optimize kprobe itself */
bf8f6e5b
AM
2394 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2395 head = &kprobe_table[i];
12310e34
JY
2396 /* Arm all kprobes on a best-effort basis */
2397 hlist_for_each_entry_rcu(p, head, hlist) {
2398 if (!kprobe_disabled(p)) {
2399 err = arm_kprobe(p);
2400 if (err) {
2401 errors++;
2402 ret = err;
2403 }
2404 total++;
2405 }
2406 }
bf8f6e5b
AM
2407 }
2408
12310e34
JY
2409 if (errors)
2410 pr_warn("Kprobes globally enabled, but failed to arm %d out of %d probes\n",
2411 errors, total);
2412 else
2413 pr_info("Kprobes globally enabled\n");
bf8f6e5b
AM
2414
2415already_enabled:
2416 mutex_unlock(&kprobe_mutex);
12310e34 2417 return ret;
bf8f6e5b
AM
2418}
2419
297f9233 2420static int disarm_all_kprobes(void)
bf8f6e5b
AM
2421{
2422 struct hlist_head *head;
bf8f6e5b 2423 struct kprobe *p;
297f9233
JY
2424 unsigned int i, total = 0, errors = 0;
2425 int err, ret = 0;
bf8f6e5b
AM
2426
2427 mutex_lock(&kprobe_mutex);
2428
e579abeb 2429 /* If kprobes are already disarmed, just return */
6274de49
MH
2430 if (kprobes_all_disarmed) {
2431 mutex_unlock(&kprobe_mutex);
297f9233 2432 return 0;
6274de49 2433 }
bf8f6e5b 2434
e579abeb 2435 kprobes_all_disarmed = true;
afd66255 2436
bf8f6e5b
AM
2437 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2438 head = &kprobe_table[i];
297f9233 2439 /* Disarm all kprobes on a best-effort basis */
b67bfe0d 2440 hlist_for_each_entry_rcu(p, head, hlist) {
297f9233
JY
2441 if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p)) {
2442 err = disarm_kprobe(p, false);
2443 if (err) {
2444 errors++;
2445 ret = err;
2446 }
2447 total++;
2448 }
bf8f6e5b
AM
2449 }
2450 }
297f9233
JY
2451
2452 if (errors)
2453 pr_warn("Kprobes globally disabled, but failed to disarm %d out of %d probes\n",
2454 errors, total);
2455 else
2456 pr_info("Kprobes globally disabled\n");
2457
bf8f6e5b 2458 mutex_unlock(&kprobe_mutex);
bf8f6e5b 2459
6274de49
MH
2460 /* Wait for disarming all kprobes by optimizer */
2461 wait_for_kprobe_optimizer();
297f9233
JY
2462
2463 return ret;
bf8f6e5b
AM
2464}
2465
2466/*
2467 * XXX: The debugfs bool file interface doesn't allow for callbacks
2468 * when the bool state is switched. We can reuse that facility when
2469 * available
2470 */
2471static ssize_t read_enabled_file_bool(struct file *file,
2472 char __user *user_buf, size_t count, loff_t *ppos)
2473{
2474 char buf[3];
2475
e579abeb 2476 if (!kprobes_all_disarmed)
bf8f6e5b
AM
2477 buf[0] = '1';
2478 else
2479 buf[0] = '0';
2480 buf[1] = '\n';
2481 buf[2] = 0x00;
2482 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
2483}
2484
2485static ssize_t write_enabled_file_bool(struct file *file,
2486 const char __user *user_buf, size_t count, loff_t *ppos)
2487{
2488 char buf[32];
efeb156e 2489 size_t buf_size;
12310e34 2490 int ret = 0;
bf8f6e5b
AM
2491
2492 buf_size = min(count, (sizeof(buf)-1));
2493 if (copy_from_user(buf, user_buf, buf_size))
2494 return -EFAULT;
2495
10fb46d5 2496 buf[buf_size] = '\0';
bf8f6e5b
AM
2497 switch (buf[0]) {
2498 case 'y':
2499 case 'Y':
2500 case '1':
12310e34 2501 ret = arm_all_kprobes();
bf8f6e5b
AM
2502 break;
2503 case 'n':
2504 case 'N':
2505 case '0':
297f9233 2506 ret = disarm_all_kprobes();
bf8f6e5b 2507 break;
10fb46d5
MK
2508 default:
2509 return -EINVAL;
bf8f6e5b
AM
2510 }
2511
12310e34
JY
2512 if (ret)
2513 return ret;
2514
bf8f6e5b
AM
2515 return count;
2516}
2517
828c0950 2518static const struct file_operations fops_kp = {
bf8f6e5b
AM
2519 .read = read_enabled_file_bool,
2520 .write = write_enabled_file_bool,
6038f373 2521 .llseek = default_llseek,
bf8f6e5b
AM
2522};
2523
55479f64 2524static int __init debugfs_kprobe_init(void)
346fd59b
SD
2525{
2526 struct dentry *dir, *file;
bf8f6e5b 2527 unsigned int value = 1;
346fd59b
SD
2528
2529 dir = debugfs_create_dir("kprobes", NULL);
2530 if (!dir)
2531 return -ENOMEM;
2532
f2a3ab36 2533 file = debugfs_create_file("list", 0400, dir, NULL,
346fd59b 2534 &debugfs_kprobes_operations);
63724740
MH
2535 if (!file)
2536 goto error;
346fd59b 2537
bf8f6e5b
AM
2538 file = debugfs_create_file("enabled", 0600, dir,
2539 &value, &fops_kp);
63724740
MH
2540 if (!file)
2541 goto error;
2542
f2a3ab36 2543 file = debugfs_create_file("blacklist", 0400, dir, NULL,
63724740
MH
2544 &debugfs_kprobe_blacklist_ops);
2545 if (!file)
2546 goto error;
bf8f6e5b 2547
346fd59b 2548 return 0;
63724740
MH
2549
2550error:
2551 debugfs_remove(dir);
2552 return -ENOMEM;
346fd59b
SD
2553}
2554
2555late_initcall(debugfs_kprobe_init);
2556#endif /* CONFIG_DEBUG_FS */
2557
2558module_init(init_kprobes);