0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #define pr_fmt(fmt) "kprobes: " fmt
0022
0023 #include <linux/kprobes.h>
0024 #include <linux/hash.h>
0025 #include <linux/init.h>
0026 #include <linux/slab.h>
0027 #include <linux/stddef.h>
0028 #include <linux/export.h>
0029 #include <linux/moduleloader.h>
0030 #include <linux/kallsyms.h>
0031 #include <linux/freezer.h>
0032 #include <linux/seq_file.h>
0033 #include <linux/debugfs.h>
0034 #include <linux/sysctl.h>
0035 #include <linux/kdebug.h>
0036 #include <linux/memory.h>
0037 #include <linux/ftrace.h>
0038 #include <linux/cpu.h>
0039 #include <linux/jump_label.h>
0040 #include <linux/static_call.h>
0041 #include <linux/perf_event.h>
0042
0043 #include <asm/sections.h>
0044 #include <asm/cacheflush.h>
0045 #include <asm/errno.h>
0046 #include <linux/uaccess.h>
0047
0048 #define KPROBE_HASH_BITS 6
0049 #define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
0050
0051 #if !defined(CONFIG_OPTPROBES) || !defined(CONFIG_SYSCTL)
0052 #define kprobe_sysctls_init() do { } while (0)
0053 #endif
0054
0055 static int kprobes_initialized;
0056
0057
0058
0059
0060
0061 static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
0062
0063
0064 static bool kprobes_all_disarmed;
0065
0066
0067 static DEFINE_MUTEX(kprobe_mutex);
0068 static DEFINE_PER_CPU(struct kprobe *, kprobe_instance);
0069
0070 kprobe_opcode_t * __weak kprobe_lookup_name(const char *name,
0071 unsigned int __unused)
0072 {
0073 return ((kprobe_opcode_t *)(kallsyms_lookup_name(name)));
0074 }
0075
0076
0077
0078
0079
0080 static LIST_HEAD(kprobe_blacklist);
0081
0082 #ifdef __ARCH_WANT_KPROBES_INSN_SLOT
0083
0084
0085
0086
0087
0088
0089 struct kprobe_insn_page {
0090 struct list_head list;
0091 kprobe_opcode_t *insns;
0092 struct kprobe_insn_cache *cache;
0093 int nused;
0094 int ngarbage;
0095 char slot_used[];
0096 };
0097
0098 #define KPROBE_INSN_PAGE_SIZE(slots) \
0099 (offsetof(struct kprobe_insn_page, slot_used) + \
0100 (sizeof(char) * (slots)))
0101
0102 static int slots_per_page(struct kprobe_insn_cache *c)
0103 {
0104 return PAGE_SIZE/(c->insn_size * sizeof(kprobe_opcode_t));
0105 }
0106
0107 enum kprobe_slot_state {
0108 SLOT_CLEAN = 0,
0109 SLOT_DIRTY = 1,
0110 SLOT_USED = 2,
0111 };
0112
0113 void __weak *alloc_insn_page(void)
0114 {
0115
0116
0117
0118
0119
0120
0121 return module_alloc(PAGE_SIZE);
0122 }
0123
0124 static void free_insn_page(void *page)
0125 {
0126 module_memfree(page);
0127 }
0128
0129 struct kprobe_insn_cache kprobe_insn_slots = {
0130 .mutex = __MUTEX_INITIALIZER(kprobe_insn_slots.mutex),
0131 .alloc = alloc_insn_page,
0132 .free = free_insn_page,
0133 .sym = KPROBE_INSN_PAGE_SYM,
0134 .pages = LIST_HEAD_INIT(kprobe_insn_slots.pages),
0135 .insn_size = MAX_INSN_SIZE,
0136 .nr_garbage = 0,
0137 };
0138 static int collect_garbage_slots(struct kprobe_insn_cache *c);
0139
0140
0141
0142
0143
0144 kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c)
0145 {
0146 struct kprobe_insn_page *kip;
0147 kprobe_opcode_t *slot = NULL;
0148
0149
0150 mutex_lock(&c->mutex);
0151 retry:
0152 rcu_read_lock();
0153 list_for_each_entry_rcu(kip, &c->pages, list) {
0154 if (kip->nused < slots_per_page(c)) {
0155 int i;
0156
0157 for (i = 0; i < slots_per_page(c); i++) {
0158 if (kip->slot_used[i] == SLOT_CLEAN) {
0159 kip->slot_used[i] = SLOT_USED;
0160 kip->nused++;
0161 slot = kip->insns + (i * c->insn_size);
0162 rcu_read_unlock();
0163 goto out;
0164 }
0165 }
0166
0167 kip->nused = slots_per_page(c);
0168 WARN_ON(1);
0169 }
0170 }
0171 rcu_read_unlock();
0172
0173
0174 if (c->nr_garbage && collect_garbage_slots(c) == 0)
0175 goto retry;
0176
0177
0178 kip = kmalloc(KPROBE_INSN_PAGE_SIZE(slots_per_page(c)), GFP_KERNEL);
0179 if (!kip)
0180 goto out;
0181
0182 kip->insns = c->alloc();
0183 if (!kip->insns) {
0184 kfree(kip);
0185 goto out;
0186 }
0187 INIT_LIST_HEAD(&kip->list);
0188 memset(kip->slot_used, SLOT_CLEAN, slots_per_page(c));
0189 kip->slot_used[0] = SLOT_USED;
0190 kip->nused = 1;
0191 kip->ngarbage = 0;
0192 kip->cache = c;
0193 list_add_rcu(&kip->list, &c->pages);
0194 slot = kip->insns;
0195
0196
0197 perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL, (unsigned long)kip->insns,
0198 PAGE_SIZE, false, c->sym);
0199 out:
0200 mutex_unlock(&c->mutex);
0201 return slot;
0202 }
0203
0204
0205 static bool collect_one_slot(struct kprobe_insn_page *kip, int idx)
0206 {
0207 kip->slot_used[idx] = SLOT_CLEAN;
0208 kip->nused--;
0209 if (kip->nused == 0) {
0210
0211
0212
0213
0214
0215
0216 if (!list_is_singular(&kip->list)) {
0217
0218
0219
0220
0221 perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL,
0222 (unsigned long)kip->insns, PAGE_SIZE, true,
0223 kip->cache->sym);
0224 list_del_rcu(&kip->list);
0225 synchronize_rcu();
0226 kip->cache->free(kip->insns);
0227 kfree(kip);
0228 }
0229 return true;
0230 }
0231 return false;
0232 }
0233
0234 static int collect_garbage_slots(struct kprobe_insn_cache *c)
0235 {
0236 struct kprobe_insn_page *kip, *next;
0237
0238
0239 synchronize_rcu();
0240
0241 list_for_each_entry_safe(kip, next, &c->pages, list) {
0242 int i;
0243
0244 if (kip->ngarbage == 0)
0245 continue;
0246 kip->ngarbage = 0;
0247 for (i = 0; i < slots_per_page(c); i++) {
0248 if (kip->slot_used[i] == SLOT_DIRTY && collect_one_slot(kip, i))
0249 break;
0250 }
0251 }
0252 c->nr_garbage = 0;
0253 return 0;
0254 }
0255
0256 void __free_insn_slot(struct kprobe_insn_cache *c,
0257 kprobe_opcode_t *slot, int dirty)
0258 {
0259 struct kprobe_insn_page *kip;
0260 long idx;
0261
0262 mutex_lock(&c->mutex);
0263 rcu_read_lock();
0264 list_for_each_entry_rcu(kip, &c->pages, list) {
0265 idx = ((long)slot - (long)kip->insns) /
0266 (c->insn_size * sizeof(kprobe_opcode_t));
0267 if (idx >= 0 && idx < slots_per_page(c))
0268 goto out;
0269 }
0270
0271 WARN_ON(1);
0272 kip = NULL;
0273 out:
0274 rcu_read_unlock();
0275
0276 if (kip) {
0277
0278 WARN_ON(kip->slot_used[idx] != SLOT_USED);
0279 if (dirty) {
0280 kip->slot_used[idx] = SLOT_DIRTY;
0281 kip->ngarbage++;
0282 if (++c->nr_garbage > slots_per_page(c))
0283 collect_garbage_slots(c);
0284 } else {
0285 collect_one_slot(kip, idx);
0286 }
0287 }
0288 mutex_unlock(&c->mutex);
0289 }
0290
0291
0292
0293
0294
0295
0296 bool __is_insn_slot_addr(struct kprobe_insn_cache *c, unsigned long addr)
0297 {
0298 struct kprobe_insn_page *kip;
0299 bool ret = false;
0300
0301 rcu_read_lock();
0302 list_for_each_entry_rcu(kip, &c->pages, list) {
0303 if (addr >= (unsigned long)kip->insns &&
0304 addr < (unsigned long)kip->insns + PAGE_SIZE) {
0305 ret = true;
0306 break;
0307 }
0308 }
0309 rcu_read_unlock();
0310
0311 return ret;
0312 }
0313
0314 int kprobe_cache_get_kallsym(struct kprobe_insn_cache *c, unsigned int *symnum,
0315 unsigned long *value, char *type, char *sym)
0316 {
0317 struct kprobe_insn_page *kip;
0318 int ret = -ERANGE;
0319
0320 rcu_read_lock();
0321 list_for_each_entry_rcu(kip, &c->pages, list) {
0322 if ((*symnum)--)
0323 continue;
0324 strscpy(sym, c->sym, KSYM_NAME_LEN);
0325 *type = 't';
0326 *value = (unsigned long)kip->insns;
0327 ret = 0;
0328 break;
0329 }
0330 rcu_read_unlock();
0331
0332 return ret;
0333 }
0334
0335 #ifdef CONFIG_OPTPROBES
0336 void __weak *alloc_optinsn_page(void)
0337 {
0338 return alloc_insn_page();
0339 }
0340
0341 void __weak free_optinsn_page(void *page)
0342 {
0343 free_insn_page(page);
0344 }
0345
0346
0347 struct kprobe_insn_cache kprobe_optinsn_slots = {
0348 .mutex = __MUTEX_INITIALIZER(kprobe_optinsn_slots.mutex),
0349 .alloc = alloc_optinsn_page,
0350 .free = free_optinsn_page,
0351 .sym = KPROBE_OPTINSN_PAGE_SYM,
0352 .pages = LIST_HEAD_INIT(kprobe_optinsn_slots.pages),
0353
0354 .nr_garbage = 0,
0355 };
0356 #endif
0357 #endif
0358
0359
0360 static inline void set_kprobe_instance(struct kprobe *kp)
0361 {
0362 __this_cpu_write(kprobe_instance, kp);
0363 }
0364
0365 static inline void reset_kprobe_instance(void)
0366 {
0367 __this_cpu_write(kprobe_instance, NULL);
0368 }
0369
0370
0371
0372
0373
0374
0375
0376 struct kprobe *get_kprobe(void *addr)
0377 {
0378 struct hlist_head *head;
0379 struct kprobe *p;
0380
0381 head = &kprobe_table[hash_ptr(addr, KPROBE_HASH_BITS)];
0382 hlist_for_each_entry_rcu(p, head, hlist,
0383 lockdep_is_held(&kprobe_mutex)) {
0384 if (p->addr == addr)
0385 return p;
0386 }
0387
0388 return NULL;
0389 }
0390 NOKPROBE_SYMBOL(get_kprobe);
0391
0392 static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs);
0393
0394
0395 static inline bool kprobe_aggrprobe(struct kprobe *p)
0396 {
0397 return p->pre_handler == aggr_pre_handler;
0398 }
0399
0400
0401 static inline bool kprobe_unused(struct kprobe *p)
0402 {
0403 return kprobe_aggrprobe(p) && kprobe_disabled(p) &&
0404 list_empty(&p->list);
0405 }
0406
0407
0408 static inline void copy_kprobe(struct kprobe *ap, struct kprobe *p)
0409 {
0410 memcpy(&p->opcode, &ap->opcode, sizeof(kprobe_opcode_t));
0411 memcpy(&p->ainsn, &ap->ainsn, sizeof(struct arch_specific_insn));
0412 }
0413
0414 #ifdef CONFIG_OPTPROBES
0415
0416 static bool kprobes_allow_optimization;
0417
0418
0419
0420
0421
0422 void opt_pre_handler(struct kprobe *p, struct pt_regs *regs)
0423 {
0424 struct kprobe *kp;
0425
0426 list_for_each_entry_rcu(kp, &p->list, list) {
0427 if (kp->pre_handler && likely(!kprobe_disabled(kp))) {
0428 set_kprobe_instance(kp);
0429 kp->pre_handler(kp, regs);
0430 }
0431 reset_kprobe_instance();
0432 }
0433 }
0434 NOKPROBE_SYMBOL(opt_pre_handler);
0435
0436
0437 static void free_aggr_kprobe(struct kprobe *p)
0438 {
0439 struct optimized_kprobe *op;
0440
0441 op = container_of(p, struct optimized_kprobe, kp);
0442 arch_remove_optimized_kprobe(op);
0443 arch_remove_kprobe(p);
0444 kfree(op);
0445 }
0446
0447
0448 static inline int kprobe_optready(struct kprobe *p)
0449 {
0450 struct optimized_kprobe *op;
0451
0452 if (kprobe_aggrprobe(p)) {
0453 op = container_of(p, struct optimized_kprobe, kp);
0454 return arch_prepared_optinsn(&op->optinsn);
0455 }
0456
0457 return 0;
0458 }
0459
0460
0461 static inline bool kprobe_disarmed(struct kprobe *p)
0462 {
0463 struct optimized_kprobe *op;
0464
0465
0466 if (!kprobe_aggrprobe(p))
0467 return kprobe_disabled(p);
0468
0469 op = container_of(p, struct optimized_kprobe, kp);
0470
0471 return kprobe_disabled(p) && list_empty(&op->list);
0472 }
0473
0474
0475 static bool kprobe_queued(struct kprobe *p)
0476 {
0477 struct optimized_kprobe *op;
0478
0479 if (kprobe_aggrprobe(p)) {
0480 op = container_of(p, struct optimized_kprobe, kp);
0481 if (!list_empty(&op->list))
0482 return true;
0483 }
0484 return false;
0485 }
0486
0487
0488
0489
0490
0491 static struct kprobe *get_optimized_kprobe(kprobe_opcode_t *addr)
0492 {
0493 int i;
0494 struct kprobe *p = NULL;
0495 struct optimized_kprobe *op;
0496
0497
0498 for (i = 1; !p && i < MAX_OPTIMIZED_LENGTH / sizeof(kprobe_opcode_t); i++)
0499 p = get_kprobe(addr - i);
0500
0501 if (p && kprobe_optready(p)) {
0502 op = container_of(p, struct optimized_kprobe, kp);
0503 if (arch_within_optimized_kprobe(op, addr))
0504 return p;
0505 }
0506
0507 return NULL;
0508 }
0509
0510
0511 static LIST_HEAD(optimizing_list);
0512 static LIST_HEAD(unoptimizing_list);
0513 static LIST_HEAD(freeing_list);
0514
0515 static void kprobe_optimizer(struct work_struct *work);
0516 static DECLARE_DELAYED_WORK(optimizing_work, kprobe_optimizer);
0517 #define OPTIMIZE_DELAY 5
0518
0519
0520
0521
0522
0523 static void do_optimize_kprobes(void)
0524 {
0525 lockdep_assert_held(&text_mutex);
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536 lockdep_assert_cpus_held();
0537
0538
0539 if (kprobes_all_disarmed || !kprobes_allow_optimization ||
0540 list_empty(&optimizing_list))
0541 return;
0542
0543 arch_optimize_kprobes(&optimizing_list);
0544 }
0545
0546
0547
0548
0549
0550 static void do_unoptimize_kprobes(void)
0551 {
0552 struct optimized_kprobe *op, *tmp;
0553
0554 lockdep_assert_held(&text_mutex);
0555
0556 lockdep_assert_cpus_held();
0557
0558
0559 if (list_empty(&unoptimizing_list))
0560 return;
0561
0562 arch_unoptimize_kprobes(&unoptimizing_list, &freeing_list);
0563
0564 list_for_each_entry_safe(op, tmp, &freeing_list, list) {
0565
0566 op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0567
0568 if (kprobe_disabled(&op->kp))
0569 arch_disarm_kprobe(&op->kp);
0570 if (kprobe_unused(&op->kp)) {
0571
0572
0573
0574
0575
0576 hlist_del_rcu(&op->kp.hlist);
0577 } else
0578 list_del_init(&op->list);
0579 }
0580 }
0581
0582
0583 static void do_free_cleaned_kprobes(void)
0584 {
0585 struct optimized_kprobe *op, *tmp;
0586
0587 list_for_each_entry_safe(op, tmp, &freeing_list, list) {
0588 list_del_init(&op->list);
0589 if (WARN_ON_ONCE(!kprobe_unused(&op->kp))) {
0590
0591
0592
0593
0594 continue;
0595 }
0596 free_aggr_kprobe(&op->kp);
0597 }
0598 }
0599
0600
0601 static void kick_kprobe_optimizer(void)
0602 {
0603 schedule_delayed_work(&optimizing_work, OPTIMIZE_DELAY);
0604 }
0605
0606
0607 static void kprobe_optimizer(struct work_struct *work)
0608 {
0609 mutex_lock(&kprobe_mutex);
0610 cpus_read_lock();
0611 mutex_lock(&text_mutex);
0612
0613
0614
0615
0616
0617 do_unoptimize_kprobes();
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628 synchronize_rcu_tasks();
0629
0630
0631 do_optimize_kprobes();
0632
0633
0634 do_free_cleaned_kprobes();
0635
0636 mutex_unlock(&text_mutex);
0637 cpus_read_unlock();
0638
0639
0640 if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
0641 kick_kprobe_optimizer();
0642
0643 mutex_unlock(&kprobe_mutex);
0644 }
0645
0646
0647 void wait_for_kprobe_optimizer(void)
0648 {
0649 mutex_lock(&kprobe_mutex);
0650
0651 while (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list)) {
0652 mutex_unlock(&kprobe_mutex);
0653
0654
0655 flush_delayed_work(&optimizing_work);
0656
0657 cpu_relax();
0658
0659 mutex_lock(&kprobe_mutex);
0660 }
0661
0662 mutex_unlock(&kprobe_mutex);
0663 }
0664
0665 static bool optprobe_queued_unopt(struct optimized_kprobe *op)
0666 {
0667 struct optimized_kprobe *_op;
0668
0669 list_for_each_entry(_op, &unoptimizing_list, list) {
0670 if (op == _op)
0671 return true;
0672 }
0673
0674 return false;
0675 }
0676
0677
0678 static void optimize_kprobe(struct kprobe *p)
0679 {
0680 struct optimized_kprobe *op;
0681
0682
0683 if (!kprobe_optready(p) || !kprobes_allow_optimization ||
0684 (kprobe_disabled(p) || kprobes_all_disarmed))
0685 return;
0686
0687
0688 if (p->post_handler)
0689 return;
0690
0691 op = container_of(p, struct optimized_kprobe, kp);
0692
0693
0694 if (arch_check_optimized_kprobe(op) < 0)
0695 return;
0696
0697
0698 if (op->kp.flags & KPROBE_FLAG_OPTIMIZED) {
0699 if (optprobe_queued_unopt(op)) {
0700
0701 list_del_init(&op->list);
0702 }
0703 return;
0704 }
0705 op->kp.flags |= KPROBE_FLAG_OPTIMIZED;
0706
0707
0708
0709
0710
0711 if (WARN_ON_ONCE(!list_empty(&op->list)))
0712 return;
0713
0714 list_add(&op->list, &optimizing_list);
0715 kick_kprobe_optimizer();
0716 }
0717
0718
0719 static void force_unoptimize_kprobe(struct optimized_kprobe *op)
0720 {
0721 lockdep_assert_cpus_held();
0722 arch_unoptimize_kprobe(op);
0723 op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0724 }
0725
0726
0727 static void unoptimize_kprobe(struct kprobe *p, bool force)
0728 {
0729 struct optimized_kprobe *op;
0730
0731 if (!kprobe_aggrprobe(p) || kprobe_disarmed(p))
0732 return;
0733
0734 op = container_of(p, struct optimized_kprobe, kp);
0735 if (!kprobe_optimized(p))
0736 return;
0737
0738 if (!list_empty(&op->list)) {
0739 if (optprobe_queued_unopt(op)) {
0740
0741 if (force) {
0742
0743
0744
0745
0746 force_unoptimize_kprobe(op);
0747 list_move(&op->list, &freeing_list);
0748 }
0749 } else {
0750
0751 list_del_init(&op->list);
0752 op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0753 }
0754 return;
0755 }
0756
0757
0758 if (force) {
0759
0760 force_unoptimize_kprobe(op);
0761 } else {
0762 list_add(&op->list, &unoptimizing_list);
0763 kick_kprobe_optimizer();
0764 }
0765 }
0766
0767
0768 static int reuse_unused_kprobe(struct kprobe *ap)
0769 {
0770 struct optimized_kprobe *op;
0771
0772
0773
0774
0775
0776 op = container_of(ap, struct optimized_kprobe, kp);
0777 WARN_ON_ONCE(list_empty(&op->list));
0778
0779 ap->flags &= ~KPROBE_FLAG_DISABLED;
0780
0781 if (!kprobe_optready(ap))
0782 return -EINVAL;
0783
0784 optimize_kprobe(ap);
0785 return 0;
0786 }
0787
0788
0789 static void kill_optimized_kprobe(struct kprobe *p)
0790 {
0791 struct optimized_kprobe *op;
0792
0793 op = container_of(p, struct optimized_kprobe, kp);
0794 if (!list_empty(&op->list))
0795
0796 list_del_init(&op->list);
0797 op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0798
0799 if (kprobe_unused(p)) {
0800
0801 list_add(&op->list, &freeing_list);
0802
0803
0804
0805
0806
0807 hlist_del_rcu(&op->kp.hlist);
0808 }
0809
0810
0811 arch_remove_optimized_kprobe(op);
0812 }
0813
0814 static inline
0815 void __prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe *p)
0816 {
0817 if (!kprobe_ftrace(p))
0818 arch_prepare_optimized_kprobe(op, p);
0819 }
0820
0821
0822 static void prepare_optimized_kprobe(struct kprobe *p)
0823 {
0824 struct optimized_kprobe *op;
0825
0826 op = container_of(p, struct optimized_kprobe, kp);
0827 __prepare_optimized_kprobe(op, p);
0828 }
0829
0830
0831 static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
0832 {
0833 struct optimized_kprobe *op;
0834
0835 op = kzalloc(sizeof(struct optimized_kprobe), GFP_KERNEL);
0836 if (!op)
0837 return NULL;
0838
0839 INIT_LIST_HEAD(&op->list);
0840 op->kp.addr = p->addr;
0841 __prepare_optimized_kprobe(op, p);
0842
0843 return &op->kp;
0844 }
0845
0846 static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p);
0847
0848
0849
0850
0851
0852 static void try_to_optimize_kprobe(struct kprobe *p)
0853 {
0854 struct kprobe *ap;
0855 struct optimized_kprobe *op;
0856
0857
0858 if (kprobe_ftrace(p))
0859 return;
0860
0861
0862 cpus_read_lock();
0863 jump_label_lock();
0864 mutex_lock(&text_mutex);
0865
0866 ap = alloc_aggr_kprobe(p);
0867 if (!ap)
0868 goto out;
0869
0870 op = container_of(ap, struct optimized_kprobe, kp);
0871 if (!arch_prepared_optinsn(&op->optinsn)) {
0872
0873 arch_remove_optimized_kprobe(op);
0874 kfree(op);
0875 goto out;
0876 }
0877
0878 init_aggr_kprobe(ap, p);
0879 optimize_kprobe(ap);
0880
0881 out:
0882 mutex_unlock(&text_mutex);
0883 jump_label_unlock();
0884 cpus_read_unlock();
0885 }
0886
0887 static void optimize_all_kprobes(void)
0888 {
0889 struct hlist_head *head;
0890 struct kprobe *p;
0891 unsigned int i;
0892
0893 mutex_lock(&kprobe_mutex);
0894
0895 if (kprobes_allow_optimization)
0896 goto out;
0897
0898 cpus_read_lock();
0899 kprobes_allow_optimization = true;
0900 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
0901 head = &kprobe_table[i];
0902 hlist_for_each_entry(p, head, hlist)
0903 if (!kprobe_disabled(p))
0904 optimize_kprobe(p);
0905 }
0906 cpus_read_unlock();
0907 pr_info("kprobe jump-optimization is enabled. All kprobes are optimized if possible.\n");
0908 out:
0909 mutex_unlock(&kprobe_mutex);
0910 }
0911
0912 #ifdef CONFIG_SYSCTL
0913 static void unoptimize_all_kprobes(void)
0914 {
0915 struct hlist_head *head;
0916 struct kprobe *p;
0917 unsigned int i;
0918
0919 mutex_lock(&kprobe_mutex);
0920
0921 if (!kprobes_allow_optimization) {
0922 mutex_unlock(&kprobe_mutex);
0923 return;
0924 }
0925
0926 cpus_read_lock();
0927 kprobes_allow_optimization = false;
0928 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
0929 head = &kprobe_table[i];
0930 hlist_for_each_entry(p, head, hlist) {
0931 if (!kprobe_disabled(p))
0932 unoptimize_kprobe(p, false);
0933 }
0934 }
0935 cpus_read_unlock();
0936 mutex_unlock(&kprobe_mutex);
0937
0938
0939 wait_for_kprobe_optimizer();
0940 pr_info("kprobe jump-optimization is disabled. All kprobes are based on software breakpoint.\n");
0941 }
0942
0943 static DEFINE_MUTEX(kprobe_sysctl_mutex);
0944 static int sysctl_kprobes_optimization;
0945 static int proc_kprobes_optimization_handler(struct ctl_table *table,
0946 int write, void *buffer,
0947 size_t *length, loff_t *ppos)
0948 {
0949 int ret;
0950
0951 mutex_lock(&kprobe_sysctl_mutex);
0952 sysctl_kprobes_optimization = kprobes_allow_optimization ? 1 : 0;
0953 ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
0954
0955 if (sysctl_kprobes_optimization)
0956 optimize_all_kprobes();
0957 else
0958 unoptimize_all_kprobes();
0959 mutex_unlock(&kprobe_sysctl_mutex);
0960
0961 return ret;
0962 }
0963
0964 static struct ctl_table kprobe_sysctls[] = {
0965 {
0966 .procname = "kprobes-optimization",
0967 .data = &sysctl_kprobes_optimization,
0968 .maxlen = sizeof(int),
0969 .mode = 0644,
0970 .proc_handler = proc_kprobes_optimization_handler,
0971 .extra1 = SYSCTL_ZERO,
0972 .extra2 = SYSCTL_ONE,
0973 },
0974 {}
0975 };
0976
0977 static void __init kprobe_sysctls_init(void)
0978 {
0979 register_sysctl_init("debug", kprobe_sysctls);
0980 }
0981 #endif
0982
0983
0984 static void __arm_kprobe(struct kprobe *p)
0985 {
0986 struct kprobe *_p;
0987
0988 lockdep_assert_held(&text_mutex);
0989
0990
0991 _p = get_optimized_kprobe(p->addr);
0992 if (unlikely(_p))
0993
0994 unoptimize_kprobe(_p, true);
0995
0996 arch_arm_kprobe(p);
0997 optimize_kprobe(p);
0998 }
0999
1000
1001 static void __disarm_kprobe(struct kprobe *p, bool reopt)
1002 {
1003 struct kprobe *_p;
1004
1005 lockdep_assert_held(&text_mutex);
1006
1007
1008 unoptimize_kprobe(p, kprobes_all_disarmed);
1009
1010 if (!kprobe_queued(p)) {
1011 arch_disarm_kprobe(p);
1012
1013 _p = get_optimized_kprobe(p->addr);
1014 if (unlikely(_p) && reopt)
1015 optimize_kprobe(_p);
1016 }
1017
1018
1019
1020
1021
1022
1023 }
1024
1025 #else
1026
1027 #define optimize_kprobe(p) do {} while (0)
1028 #define unoptimize_kprobe(p, f) do {} while (0)
1029 #define kill_optimized_kprobe(p) do {} while (0)
1030 #define prepare_optimized_kprobe(p) do {} while (0)
1031 #define try_to_optimize_kprobe(p) do {} while (0)
1032 #define __arm_kprobe(p) arch_arm_kprobe(p)
1033 #define __disarm_kprobe(p, o) arch_disarm_kprobe(p)
1034 #define kprobe_disarmed(p) kprobe_disabled(p)
1035 #define wait_for_kprobe_optimizer() do {} while (0)
1036
1037 static int reuse_unused_kprobe(struct kprobe *ap)
1038 {
1039
1040
1041
1042
1043
1044
1045 WARN_ON_ONCE(1);
1046 return -EINVAL;
1047 }
1048
1049 static void free_aggr_kprobe(struct kprobe *p)
1050 {
1051 arch_remove_kprobe(p);
1052 kfree(p);
1053 }
1054
1055 static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
1056 {
1057 return kzalloc(sizeof(struct kprobe), GFP_KERNEL);
1058 }
1059 #endif
1060
1061 #ifdef CONFIG_KPROBES_ON_FTRACE
1062 static struct ftrace_ops kprobe_ftrace_ops __read_mostly = {
1063 .func = kprobe_ftrace_handler,
1064 .flags = FTRACE_OPS_FL_SAVE_REGS,
1065 };
1066
1067 static struct ftrace_ops kprobe_ipmodify_ops __read_mostly = {
1068 .func = kprobe_ftrace_handler,
1069 .flags = FTRACE_OPS_FL_SAVE_REGS | FTRACE_OPS_FL_IPMODIFY,
1070 };
1071
1072 static int kprobe_ipmodify_enabled;
1073 static int kprobe_ftrace_enabled;
1074
1075 static int __arm_kprobe_ftrace(struct kprobe *p, struct ftrace_ops *ops,
1076 int *cnt)
1077 {
1078 int ret = 0;
1079
1080 lockdep_assert_held(&kprobe_mutex);
1081
1082 ret = ftrace_set_filter_ip(ops, (unsigned long)p->addr, 0, 0);
1083 if (WARN_ONCE(ret < 0, "Failed to arm kprobe-ftrace at %pS (error %d)\n", p->addr, ret))
1084 return ret;
1085
1086 if (*cnt == 0) {
1087 ret = register_ftrace_function(ops);
1088 if (WARN(ret < 0, "Failed to register kprobe-ftrace (error %d)\n", ret))
1089 goto err_ftrace;
1090 }
1091
1092 (*cnt)++;
1093 return ret;
1094
1095 err_ftrace:
1096
1097
1098
1099
1100 ftrace_set_filter_ip(ops, (unsigned long)p->addr, 1, 0);
1101 return ret;
1102 }
1103
1104 static int arm_kprobe_ftrace(struct kprobe *p)
1105 {
1106 bool ipmodify = (p->post_handler != NULL);
1107
1108 return __arm_kprobe_ftrace(p,
1109 ipmodify ? &kprobe_ipmodify_ops : &kprobe_ftrace_ops,
1110 ipmodify ? &kprobe_ipmodify_enabled : &kprobe_ftrace_enabled);
1111 }
1112
1113 static int __disarm_kprobe_ftrace(struct kprobe *p, struct ftrace_ops *ops,
1114 int *cnt)
1115 {
1116 int ret = 0;
1117
1118 lockdep_assert_held(&kprobe_mutex);
1119
1120 if (*cnt == 1) {
1121 ret = unregister_ftrace_function(ops);
1122 if (WARN(ret < 0, "Failed to unregister kprobe-ftrace (error %d)\n", ret))
1123 return ret;
1124 }
1125
1126 (*cnt)--;
1127
1128 ret = ftrace_set_filter_ip(ops, (unsigned long)p->addr, 1, 0);
1129 WARN_ONCE(ret < 0, "Failed to disarm kprobe-ftrace at %pS (error %d)\n",
1130 p->addr, ret);
1131 return ret;
1132 }
1133
1134 static int disarm_kprobe_ftrace(struct kprobe *p)
1135 {
1136 bool ipmodify = (p->post_handler != NULL);
1137
1138 return __disarm_kprobe_ftrace(p,
1139 ipmodify ? &kprobe_ipmodify_ops : &kprobe_ftrace_ops,
1140 ipmodify ? &kprobe_ipmodify_enabled : &kprobe_ftrace_enabled);
1141 }
1142 #else
1143 static inline int arm_kprobe_ftrace(struct kprobe *p)
1144 {
1145 return -ENODEV;
1146 }
1147
1148 static inline int disarm_kprobe_ftrace(struct kprobe *p)
1149 {
1150 return -ENODEV;
1151 }
1152 #endif
1153
1154 static int prepare_kprobe(struct kprobe *p)
1155 {
1156
1157 if (kprobe_ftrace(p))
1158 return arch_prepare_kprobe_ftrace(p);
1159
1160 return arch_prepare_kprobe(p);
1161 }
1162
1163 static int arm_kprobe(struct kprobe *kp)
1164 {
1165 if (unlikely(kprobe_ftrace(kp)))
1166 return arm_kprobe_ftrace(kp);
1167
1168 cpus_read_lock();
1169 mutex_lock(&text_mutex);
1170 __arm_kprobe(kp);
1171 mutex_unlock(&text_mutex);
1172 cpus_read_unlock();
1173
1174 return 0;
1175 }
1176
1177 static int disarm_kprobe(struct kprobe *kp, bool reopt)
1178 {
1179 if (unlikely(kprobe_ftrace(kp)))
1180 return disarm_kprobe_ftrace(kp);
1181
1182 cpus_read_lock();
1183 mutex_lock(&text_mutex);
1184 __disarm_kprobe(kp, reopt);
1185 mutex_unlock(&text_mutex);
1186 cpus_read_unlock();
1187
1188 return 0;
1189 }
1190
1191
1192
1193
1194
1195 static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
1196 {
1197 struct kprobe *kp;
1198
1199 list_for_each_entry_rcu(kp, &p->list, list) {
1200 if (kp->pre_handler && likely(!kprobe_disabled(kp))) {
1201 set_kprobe_instance(kp);
1202 if (kp->pre_handler(kp, regs))
1203 return 1;
1204 }
1205 reset_kprobe_instance();
1206 }
1207 return 0;
1208 }
1209 NOKPROBE_SYMBOL(aggr_pre_handler);
1210
1211 static void aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
1212 unsigned long flags)
1213 {
1214 struct kprobe *kp;
1215
1216 list_for_each_entry_rcu(kp, &p->list, list) {
1217 if (kp->post_handler && likely(!kprobe_disabled(kp))) {
1218 set_kprobe_instance(kp);
1219 kp->post_handler(kp, regs, flags);
1220 reset_kprobe_instance();
1221 }
1222 }
1223 }
1224 NOKPROBE_SYMBOL(aggr_post_handler);
1225
1226
1227 void kprobes_inc_nmissed_count(struct kprobe *p)
1228 {
1229 struct kprobe *kp;
1230
1231 if (!kprobe_aggrprobe(p)) {
1232 p->nmissed++;
1233 } else {
1234 list_for_each_entry_rcu(kp, &p->list, list)
1235 kp->nmissed++;
1236 }
1237 }
1238 NOKPROBE_SYMBOL(kprobes_inc_nmissed_count);
1239
1240 static struct kprobe kprobe_busy = {
1241 .addr = (void *) get_kprobe,
1242 };
1243
1244 void kprobe_busy_begin(void)
1245 {
1246 struct kprobe_ctlblk *kcb;
1247
1248 preempt_disable();
1249 __this_cpu_write(current_kprobe, &kprobe_busy);
1250 kcb = get_kprobe_ctlblk();
1251 kcb->kprobe_status = KPROBE_HIT_ACTIVE;
1252 }
1253
1254 void kprobe_busy_end(void)
1255 {
1256 __this_cpu_write(current_kprobe, NULL);
1257 preempt_enable();
1258 }
1259
1260
1261 static int add_new_kprobe(struct kprobe *ap, struct kprobe *p)
1262 {
1263 if (p->post_handler)
1264 unoptimize_kprobe(ap, true);
1265
1266 list_add_rcu(&p->list, &ap->list);
1267 if (p->post_handler && !ap->post_handler)
1268 ap->post_handler = aggr_post_handler;
1269
1270 return 0;
1271 }
1272
1273
1274
1275
1276
1277 static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
1278 {
1279
1280 copy_kprobe(p, ap);
1281 flush_insn_slot(ap);
1282 ap->addr = p->addr;
1283 ap->flags = p->flags & ~KPROBE_FLAG_OPTIMIZED;
1284 ap->pre_handler = aggr_pre_handler;
1285
1286 if (p->post_handler && !kprobe_gone(p))
1287 ap->post_handler = aggr_post_handler;
1288
1289 INIT_LIST_HEAD(&ap->list);
1290 INIT_HLIST_NODE(&ap->hlist);
1291
1292 list_add_rcu(&p->list, &ap->list);
1293 hlist_replace_rcu(&p->hlist, &ap->hlist);
1294 }
1295
1296
1297
1298
1299 static int register_aggr_kprobe(struct kprobe *orig_p, struct kprobe *p)
1300 {
1301 int ret = 0;
1302 struct kprobe *ap = orig_p;
1303
1304 cpus_read_lock();
1305
1306
1307 jump_label_lock();
1308 mutex_lock(&text_mutex);
1309
1310 if (!kprobe_aggrprobe(orig_p)) {
1311
1312 ap = alloc_aggr_kprobe(orig_p);
1313 if (!ap) {
1314 ret = -ENOMEM;
1315 goto out;
1316 }
1317 init_aggr_kprobe(ap, orig_p);
1318 } else if (kprobe_unused(ap)) {
1319
1320 ret = reuse_unused_kprobe(ap);
1321 if (ret)
1322 goto out;
1323 }
1324
1325 if (kprobe_gone(ap)) {
1326
1327
1328
1329
1330
1331
1332 ret = arch_prepare_kprobe(ap);
1333 if (ret)
1334
1335
1336
1337
1338
1339 goto out;
1340
1341
1342 prepare_optimized_kprobe(ap);
1343
1344
1345
1346
1347
1348 ap->flags = (ap->flags & ~KPROBE_FLAG_GONE)
1349 | KPROBE_FLAG_DISABLED;
1350 }
1351
1352
1353 copy_kprobe(ap, p);
1354 ret = add_new_kprobe(ap, p);
1355
1356 out:
1357 mutex_unlock(&text_mutex);
1358 jump_label_unlock();
1359 cpus_read_unlock();
1360
1361 if (ret == 0 && kprobe_disabled(ap) && !kprobe_disabled(p)) {
1362 ap->flags &= ~KPROBE_FLAG_DISABLED;
1363 if (!kprobes_all_disarmed) {
1364
1365 ret = arm_kprobe(ap);
1366 if (ret) {
1367 ap->flags |= KPROBE_FLAG_DISABLED;
1368 list_del_rcu(&p->list);
1369 synchronize_rcu();
1370 }
1371 }
1372 }
1373 return ret;
1374 }
1375
1376 bool __weak arch_within_kprobe_blacklist(unsigned long addr)
1377 {
1378
1379 return addr >= (unsigned long)__kprobes_text_start &&
1380 addr < (unsigned long)__kprobes_text_end;
1381 }
1382
1383 static bool __within_kprobe_blacklist(unsigned long addr)
1384 {
1385 struct kprobe_blacklist_entry *ent;
1386
1387 if (arch_within_kprobe_blacklist(addr))
1388 return true;
1389
1390
1391
1392
1393 list_for_each_entry(ent, &kprobe_blacklist, list) {
1394 if (addr >= ent->start_addr && addr < ent->end_addr)
1395 return true;
1396 }
1397 return false;
1398 }
1399
1400 bool within_kprobe_blacklist(unsigned long addr)
1401 {
1402 char symname[KSYM_NAME_LEN], *p;
1403
1404 if (__within_kprobe_blacklist(addr))
1405 return true;
1406
1407
1408 if (!lookup_symbol_name(addr, symname)) {
1409 p = strchr(symname, '.');
1410 if (!p)
1411 return false;
1412 *p = '\0';
1413 addr = (unsigned long)kprobe_lookup_name(symname, 0);
1414 if (addr)
1415 return __within_kprobe_blacklist(addr);
1416 }
1417 return false;
1418 }
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434 kprobe_opcode_t *__weak arch_adjust_kprobe_addr(unsigned long addr,
1435 unsigned long offset,
1436 bool *on_func_entry)
1437 {
1438 *on_func_entry = !offset;
1439 return (kprobe_opcode_t *)(addr + offset);
1440 }
1441
1442
1443
1444
1445
1446
1447
1448 static kprobe_opcode_t *
1449 _kprobe_addr(kprobe_opcode_t *addr, const char *symbol_name,
1450 unsigned long offset, bool *on_func_entry)
1451 {
1452 if ((symbol_name && addr) || (!symbol_name && !addr))
1453 goto invalid;
1454
1455 if (symbol_name) {
1456
1457
1458
1459
1460
1461
1462
1463 addr = kprobe_lookup_name(symbol_name, offset);
1464 if (!addr)
1465 return ERR_PTR(-ENOENT);
1466 }
1467
1468
1469
1470
1471
1472 addr = (void *)addr + offset;
1473 if (!kallsyms_lookup_size_offset((unsigned long)addr, NULL, &offset))
1474 return ERR_PTR(-ENOENT);
1475 addr = (void *)addr - offset;
1476
1477
1478
1479
1480
1481
1482 addr = arch_adjust_kprobe_addr((unsigned long)addr, offset, on_func_entry);
1483 if (addr)
1484 return addr;
1485
1486 invalid:
1487 return ERR_PTR(-EINVAL);
1488 }
1489
1490 static kprobe_opcode_t *kprobe_addr(struct kprobe *p)
1491 {
1492 bool on_func_entry;
1493 return _kprobe_addr(p->addr, p->symbol_name, p->offset, &on_func_entry);
1494 }
1495
1496
1497
1498
1499
1500 static struct kprobe *__get_valid_kprobe(struct kprobe *p)
1501 {
1502 struct kprobe *ap, *list_p;
1503
1504 lockdep_assert_held(&kprobe_mutex);
1505
1506 ap = get_kprobe(p->addr);
1507 if (unlikely(!ap))
1508 return NULL;
1509
1510 if (p != ap) {
1511 list_for_each_entry(list_p, &ap->list, list)
1512 if (list_p == p)
1513
1514 goto valid;
1515 return NULL;
1516 }
1517 valid:
1518 return ap;
1519 }
1520
1521
1522
1523
1524
1525 static inline int warn_kprobe_rereg(struct kprobe *p)
1526 {
1527 int ret = 0;
1528
1529 mutex_lock(&kprobe_mutex);
1530 if (WARN_ON_ONCE(__get_valid_kprobe(p)))
1531 ret = -EINVAL;
1532 mutex_unlock(&kprobe_mutex);
1533
1534 return ret;
1535 }
1536
1537 static int check_ftrace_location(struct kprobe *p)
1538 {
1539 unsigned long addr = (unsigned long)p->addr;
1540
1541 if (ftrace_location(addr) == addr) {
1542 #ifdef CONFIG_KPROBES_ON_FTRACE
1543 p->flags |= KPROBE_FLAG_FTRACE;
1544 #else
1545 return -EINVAL;
1546 #endif
1547 }
1548 return 0;
1549 }
1550
1551 static int check_kprobe_address_safe(struct kprobe *p,
1552 struct module **probed_mod)
1553 {
1554 int ret;
1555
1556 ret = check_ftrace_location(p);
1557 if (ret)
1558 return ret;
1559 jump_label_lock();
1560 preempt_disable();
1561
1562
1563 if (!(core_kernel_text((unsigned long) p->addr) ||
1564 is_module_text_address((unsigned long) p->addr)) ||
1565 in_gate_area_no_mm((unsigned long) p->addr) ||
1566 within_kprobe_blacklist((unsigned long) p->addr) ||
1567 jump_label_text_reserved(p->addr, p->addr) ||
1568 static_call_text_reserved(p->addr, p->addr) ||
1569 find_bug((unsigned long)p->addr)) {
1570 ret = -EINVAL;
1571 goto out;
1572 }
1573
1574
1575 *probed_mod = __module_text_address((unsigned long) p->addr);
1576 if (*probed_mod) {
1577
1578
1579
1580
1581 if (unlikely(!try_module_get(*probed_mod))) {
1582 ret = -ENOENT;
1583 goto out;
1584 }
1585
1586
1587
1588
1589
1590 if (within_module_init((unsigned long)p->addr, *probed_mod) &&
1591 (*probed_mod)->state != MODULE_STATE_COMING) {
1592 module_put(*probed_mod);
1593 *probed_mod = NULL;
1594 ret = -ENOENT;
1595 }
1596 }
1597 out:
1598 preempt_enable();
1599 jump_label_unlock();
1600
1601 return ret;
1602 }
1603
1604 int register_kprobe(struct kprobe *p)
1605 {
1606 int ret;
1607 struct kprobe *old_p;
1608 struct module *probed_mod;
1609 kprobe_opcode_t *addr;
1610
1611
1612 addr = kprobe_addr(p);
1613 if (IS_ERR(addr))
1614 return PTR_ERR(addr);
1615 p->addr = addr;
1616
1617 ret = warn_kprobe_rereg(p);
1618 if (ret)
1619 return ret;
1620
1621
1622 p->flags &= KPROBE_FLAG_DISABLED;
1623 p->nmissed = 0;
1624 INIT_LIST_HEAD(&p->list);
1625
1626 ret = check_kprobe_address_safe(p, &probed_mod);
1627 if (ret)
1628 return ret;
1629
1630 mutex_lock(&kprobe_mutex);
1631
1632 old_p = get_kprobe(p->addr);
1633 if (old_p) {
1634
1635 ret = register_aggr_kprobe(old_p, p);
1636 goto out;
1637 }
1638
1639 cpus_read_lock();
1640
1641 mutex_lock(&text_mutex);
1642 ret = prepare_kprobe(p);
1643 mutex_unlock(&text_mutex);
1644 cpus_read_unlock();
1645 if (ret)
1646 goto out;
1647
1648 INIT_HLIST_NODE(&p->hlist);
1649 hlist_add_head_rcu(&p->hlist,
1650 &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
1651
1652 if (!kprobes_all_disarmed && !kprobe_disabled(p)) {
1653 ret = arm_kprobe(p);
1654 if (ret) {
1655 hlist_del_rcu(&p->hlist);
1656 synchronize_rcu();
1657 goto out;
1658 }
1659 }
1660
1661
1662 try_to_optimize_kprobe(p);
1663 out:
1664 mutex_unlock(&kprobe_mutex);
1665
1666 if (probed_mod)
1667 module_put(probed_mod);
1668
1669 return ret;
1670 }
1671 EXPORT_SYMBOL_GPL(register_kprobe);
1672
1673
1674 static bool aggr_kprobe_disabled(struct kprobe *ap)
1675 {
1676 struct kprobe *kp;
1677
1678 lockdep_assert_held(&kprobe_mutex);
1679
1680 list_for_each_entry(kp, &ap->list, list)
1681 if (!kprobe_disabled(kp))
1682
1683
1684
1685
1686 return false;
1687
1688 return true;
1689 }
1690
1691 static struct kprobe *__disable_kprobe(struct kprobe *p)
1692 {
1693 struct kprobe *orig_p;
1694 int ret;
1695
1696 lockdep_assert_held(&kprobe_mutex);
1697
1698
1699 orig_p = __get_valid_kprobe(p);
1700 if (unlikely(orig_p == NULL))
1701 return ERR_PTR(-EINVAL);
1702
1703 if (!kprobe_disabled(p)) {
1704
1705 if (p != orig_p)
1706 p->flags |= KPROBE_FLAG_DISABLED;
1707
1708
1709 if (p == orig_p || aggr_kprobe_disabled(orig_p)) {
1710
1711
1712
1713
1714
1715
1716 if (!kprobes_all_disarmed && !kprobe_disabled(orig_p)) {
1717 ret = disarm_kprobe(orig_p, true);
1718 if (ret) {
1719 p->flags &= ~KPROBE_FLAG_DISABLED;
1720 return ERR_PTR(ret);
1721 }
1722 }
1723 orig_p->flags |= KPROBE_FLAG_DISABLED;
1724 }
1725 }
1726
1727 return orig_p;
1728 }
1729
1730
1731
1732
1733 static int __unregister_kprobe_top(struct kprobe *p)
1734 {
1735 struct kprobe *ap, *list_p;
1736
1737
1738 ap = __disable_kprobe(p);
1739 if (IS_ERR(ap))
1740 return PTR_ERR(ap);
1741
1742 if (ap == p)
1743
1744
1745
1746
1747 goto disarmed;
1748
1749
1750 WARN_ON(!kprobe_aggrprobe(ap));
1751
1752 if (list_is_singular(&ap->list) && kprobe_disarmed(ap))
1753
1754
1755
1756
1757 goto disarmed;
1758 else {
1759
1760 if (p->post_handler && !kprobe_gone(p)) {
1761 list_for_each_entry(list_p, &ap->list, list) {
1762 if ((list_p != p) && (list_p->post_handler))
1763 goto noclean;
1764 }
1765 ap->post_handler = NULL;
1766 }
1767 noclean:
1768
1769
1770
1771
1772 list_del_rcu(&p->list);
1773 if (!kprobe_disabled(ap) && !kprobes_all_disarmed)
1774
1775
1776
1777
1778 optimize_kprobe(ap);
1779 }
1780 return 0;
1781
1782 disarmed:
1783 hlist_del_rcu(&ap->hlist);
1784 return 0;
1785 }
1786
1787 static void __unregister_kprobe_bottom(struct kprobe *p)
1788 {
1789 struct kprobe *ap;
1790
1791 if (list_empty(&p->list))
1792
1793 arch_remove_kprobe(p);
1794 else if (list_is_singular(&p->list)) {
1795
1796 ap = list_entry(p->list.next, struct kprobe, list);
1797 list_del(&p->list);
1798 free_aggr_kprobe(ap);
1799 }
1800
1801 }
1802
1803 int register_kprobes(struct kprobe **kps, int num)
1804 {
1805 int i, ret = 0;
1806
1807 if (num <= 0)
1808 return -EINVAL;
1809 for (i = 0; i < num; i++) {
1810 ret = register_kprobe(kps[i]);
1811 if (ret < 0) {
1812 if (i > 0)
1813 unregister_kprobes(kps, i);
1814 break;
1815 }
1816 }
1817 return ret;
1818 }
1819 EXPORT_SYMBOL_GPL(register_kprobes);
1820
1821 void unregister_kprobe(struct kprobe *p)
1822 {
1823 unregister_kprobes(&p, 1);
1824 }
1825 EXPORT_SYMBOL_GPL(unregister_kprobe);
1826
1827 void unregister_kprobes(struct kprobe **kps, int num)
1828 {
1829 int i;
1830
1831 if (num <= 0)
1832 return;
1833 mutex_lock(&kprobe_mutex);
1834 for (i = 0; i < num; i++)
1835 if (__unregister_kprobe_top(kps[i]) < 0)
1836 kps[i]->addr = NULL;
1837 mutex_unlock(&kprobe_mutex);
1838
1839 synchronize_rcu();
1840 for (i = 0; i < num; i++)
1841 if (kps[i]->addr)
1842 __unregister_kprobe_bottom(kps[i]);
1843 }
1844 EXPORT_SYMBOL_GPL(unregister_kprobes);
1845
1846 int __weak kprobe_exceptions_notify(struct notifier_block *self,
1847 unsigned long val, void *data)
1848 {
1849 return NOTIFY_DONE;
1850 }
1851 NOKPROBE_SYMBOL(kprobe_exceptions_notify);
1852
1853 static struct notifier_block kprobe_exceptions_nb = {
1854 .notifier_call = kprobe_exceptions_notify,
1855 .priority = 0x7fffffff
1856 };
1857
1858 #ifdef CONFIG_KRETPROBES
1859
1860 #if !defined(CONFIG_KRETPROBE_ON_RETHOOK)
1861 static void free_rp_inst_rcu(struct rcu_head *head)
1862 {
1863 struct kretprobe_instance *ri = container_of(head, struct kretprobe_instance, rcu);
1864
1865 if (refcount_dec_and_test(&ri->rph->ref))
1866 kfree(ri->rph);
1867 kfree(ri);
1868 }
1869 NOKPROBE_SYMBOL(free_rp_inst_rcu);
1870
1871 static void recycle_rp_inst(struct kretprobe_instance *ri)
1872 {
1873 struct kretprobe *rp = get_kretprobe(ri);
1874
1875 if (likely(rp))
1876 freelist_add(&ri->freelist, &rp->freelist);
1877 else
1878 call_rcu(&ri->rcu, free_rp_inst_rcu);
1879 }
1880 NOKPROBE_SYMBOL(recycle_rp_inst);
1881
1882
1883
1884
1885
1886
1887
1888 void kprobe_flush_task(struct task_struct *tk)
1889 {
1890 struct kretprobe_instance *ri;
1891 struct llist_node *node;
1892
1893
1894 if (unlikely(!kprobes_initialized))
1895 return;
1896
1897 kprobe_busy_begin();
1898
1899 node = __llist_del_all(&tk->kretprobe_instances);
1900 while (node) {
1901 ri = container_of(node, struct kretprobe_instance, llist);
1902 node = node->next;
1903
1904 recycle_rp_inst(ri);
1905 }
1906
1907 kprobe_busy_end();
1908 }
1909 NOKPROBE_SYMBOL(kprobe_flush_task);
1910
1911 static inline void free_rp_inst(struct kretprobe *rp)
1912 {
1913 struct kretprobe_instance *ri;
1914 struct freelist_node *node;
1915 int count = 0;
1916
1917 node = rp->freelist.head;
1918 while (node) {
1919 ri = container_of(node, struct kretprobe_instance, freelist);
1920 node = node->next;
1921
1922 kfree(ri);
1923 count++;
1924 }
1925
1926 if (refcount_sub_and_test(count, &rp->rph->ref)) {
1927 kfree(rp->rph);
1928 rp->rph = NULL;
1929 }
1930 }
1931
1932
1933 static kprobe_opcode_t *__kretprobe_find_ret_addr(struct task_struct *tsk,
1934 struct llist_node **cur)
1935 {
1936 struct kretprobe_instance *ri = NULL;
1937 struct llist_node *node = *cur;
1938
1939 if (!node)
1940 node = tsk->kretprobe_instances.first;
1941 else
1942 node = node->next;
1943
1944 while (node) {
1945 ri = container_of(node, struct kretprobe_instance, llist);
1946 if (ri->ret_addr != kretprobe_trampoline_addr()) {
1947 *cur = node;
1948 return ri->ret_addr;
1949 }
1950 node = node->next;
1951 }
1952 return NULL;
1953 }
1954 NOKPROBE_SYMBOL(__kretprobe_find_ret_addr);
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971 unsigned long kretprobe_find_ret_addr(struct task_struct *tsk, void *fp,
1972 struct llist_node **cur)
1973 {
1974 struct kretprobe_instance *ri = NULL;
1975 kprobe_opcode_t *ret;
1976
1977 if (WARN_ON_ONCE(!cur))
1978 return 0;
1979
1980 do {
1981 ret = __kretprobe_find_ret_addr(tsk, cur);
1982 if (!ret)
1983 break;
1984 ri = container_of(*cur, struct kretprobe_instance, llist);
1985 } while (ri->fp != fp);
1986
1987 return (unsigned long)ret;
1988 }
1989 NOKPROBE_SYMBOL(kretprobe_find_ret_addr);
1990
1991 void __weak arch_kretprobe_fixup_return(struct pt_regs *regs,
1992 kprobe_opcode_t *correct_ret_addr)
1993 {
1994
1995
1996
1997
1998 }
1999
2000 unsigned long __kretprobe_trampoline_handler(struct pt_regs *regs,
2001 void *frame_pointer)
2002 {
2003 kprobe_opcode_t *correct_ret_addr = NULL;
2004 struct kretprobe_instance *ri = NULL;
2005 struct llist_node *first, *node = NULL;
2006 struct kretprobe *rp;
2007
2008
2009 correct_ret_addr = __kretprobe_find_ret_addr(current, &node);
2010 if (!correct_ret_addr) {
2011 pr_err("kretprobe: Return address not found, not execute handler. Maybe there is a bug in the kernel.\n");
2012 BUG_ON(1);
2013 }
2014
2015
2016
2017
2018
2019
2020 instruction_pointer_set(regs, (unsigned long)correct_ret_addr);
2021
2022
2023 first = current->kretprobe_instances.first;
2024 while (first) {
2025 ri = container_of(first, struct kretprobe_instance, llist);
2026
2027 if (WARN_ON_ONCE(ri->fp != frame_pointer))
2028 break;
2029
2030 rp = get_kretprobe(ri);
2031 if (rp && rp->handler) {
2032 struct kprobe *prev = kprobe_running();
2033
2034 __this_cpu_write(current_kprobe, &rp->kp);
2035 ri->ret_addr = correct_ret_addr;
2036 rp->handler(ri, regs);
2037 __this_cpu_write(current_kprobe, prev);
2038 }
2039 if (first == node)
2040 break;
2041
2042 first = first->next;
2043 }
2044
2045 arch_kretprobe_fixup_return(regs, correct_ret_addr);
2046
2047
2048 first = current->kretprobe_instances.first;
2049 current->kretprobe_instances.first = node->next;
2050 node->next = NULL;
2051
2052
2053 while (first) {
2054 ri = container_of(first, struct kretprobe_instance, llist);
2055 first = first->next;
2056
2057 recycle_rp_inst(ri);
2058 }
2059
2060 return (unsigned long)correct_ret_addr;
2061 }
2062 NOKPROBE_SYMBOL(__kretprobe_trampoline_handler)
2063
2064
2065
2066
2067
2068 static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
2069 {
2070 struct kretprobe *rp = container_of(p, struct kretprobe, kp);
2071 struct kretprobe_instance *ri;
2072 struct freelist_node *fn;
2073
2074 fn = freelist_try_get(&rp->freelist);
2075 if (!fn) {
2076 rp->nmissed++;
2077 return 0;
2078 }
2079
2080 ri = container_of(fn, struct kretprobe_instance, freelist);
2081
2082 if (rp->entry_handler && rp->entry_handler(ri, regs)) {
2083 freelist_add(&ri->freelist, &rp->freelist);
2084 return 0;
2085 }
2086
2087 arch_prepare_kretprobe(ri, regs);
2088
2089 __llist_add(&ri->llist, ¤t->kretprobe_instances);
2090
2091 return 0;
2092 }
2093 NOKPROBE_SYMBOL(pre_handler_kretprobe);
2094 #else
2095
2096
2097
2098
2099 static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
2100 {
2101 struct kretprobe *rp = container_of(p, struct kretprobe, kp);
2102 struct kretprobe_instance *ri;
2103 struct rethook_node *rhn;
2104
2105 rhn = rethook_try_get(rp->rh);
2106 if (!rhn) {
2107 rp->nmissed++;
2108 return 0;
2109 }
2110
2111 ri = container_of(rhn, struct kretprobe_instance, node);
2112
2113 if (rp->entry_handler && rp->entry_handler(ri, regs))
2114 rethook_recycle(rhn);
2115 else
2116 rethook_hook(rhn, regs, kprobe_ftrace(p));
2117
2118 return 0;
2119 }
2120 NOKPROBE_SYMBOL(pre_handler_kretprobe);
2121
2122 static void kretprobe_rethook_handler(struct rethook_node *rh, void *data,
2123 struct pt_regs *regs)
2124 {
2125 struct kretprobe *rp = (struct kretprobe *)data;
2126 struct kretprobe_instance *ri;
2127 struct kprobe_ctlblk *kcb;
2128
2129
2130 if (WARN_ON_ONCE(!data) || !rp->handler)
2131 return;
2132
2133 __this_cpu_write(current_kprobe, &rp->kp);
2134 kcb = get_kprobe_ctlblk();
2135 kcb->kprobe_status = KPROBE_HIT_ACTIVE;
2136
2137 ri = container_of(rh, struct kretprobe_instance, node);
2138 rp->handler(ri, regs);
2139
2140 __this_cpu_write(current_kprobe, NULL);
2141 }
2142 NOKPROBE_SYMBOL(kretprobe_rethook_handler);
2143
2144 #endif
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159 int kprobe_on_func_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset)
2160 {
2161 bool on_func_entry;
2162 kprobe_opcode_t *kp_addr = _kprobe_addr(addr, sym, offset, &on_func_entry);
2163
2164 if (IS_ERR(kp_addr))
2165 return PTR_ERR(kp_addr);
2166
2167 if (!on_func_entry)
2168 return -EINVAL;
2169
2170 return 0;
2171 }
2172
2173 int register_kretprobe(struct kretprobe *rp)
2174 {
2175 int ret;
2176 struct kretprobe_instance *inst;
2177 int i;
2178 void *addr;
2179
2180 ret = kprobe_on_func_entry(rp->kp.addr, rp->kp.symbol_name, rp->kp.offset);
2181 if (ret)
2182 return ret;
2183
2184
2185 if (rp->kp.addr && warn_kprobe_rereg(&rp->kp))
2186 return -EINVAL;
2187
2188 if (kretprobe_blacklist_size) {
2189 addr = kprobe_addr(&rp->kp);
2190 if (IS_ERR(addr))
2191 return PTR_ERR(addr);
2192
2193 for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
2194 if (kretprobe_blacklist[i].addr == addr)
2195 return -EINVAL;
2196 }
2197 }
2198
2199 if (rp->data_size > KRETPROBE_MAX_DATA_SIZE)
2200 return -E2BIG;
2201
2202 rp->kp.pre_handler = pre_handler_kretprobe;
2203 rp->kp.post_handler = NULL;
2204
2205
2206 if (rp->maxactive <= 0) {
2207 #ifdef CONFIG_PREEMPTION
2208 rp->maxactive = max_t(unsigned int, 10, 2*num_possible_cpus());
2209 #else
2210 rp->maxactive = num_possible_cpus();
2211 #endif
2212 }
2213 #ifdef CONFIG_KRETPROBE_ON_RETHOOK
2214 rp->rh = rethook_alloc((void *)rp, kretprobe_rethook_handler);
2215 if (!rp->rh)
2216 return -ENOMEM;
2217
2218 for (i = 0; i < rp->maxactive; i++) {
2219 inst = kzalloc(sizeof(struct kretprobe_instance) +
2220 rp->data_size, GFP_KERNEL);
2221 if (inst == NULL) {
2222 rethook_free(rp->rh);
2223 rp->rh = NULL;
2224 return -ENOMEM;
2225 }
2226 rethook_add_node(rp->rh, &inst->node);
2227 }
2228 rp->nmissed = 0;
2229
2230 ret = register_kprobe(&rp->kp);
2231 if (ret != 0) {
2232 rethook_free(rp->rh);
2233 rp->rh = NULL;
2234 }
2235 #else
2236 rp->freelist.head = NULL;
2237 rp->rph = kzalloc(sizeof(struct kretprobe_holder), GFP_KERNEL);
2238 if (!rp->rph)
2239 return -ENOMEM;
2240
2241 rp->rph->rp = rp;
2242 for (i = 0; i < rp->maxactive; i++) {
2243 inst = kzalloc(sizeof(struct kretprobe_instance) +
2244 rp->data_size, GFP_KERNEL);
2245 if (inst == NULL) {
2246 refcount_set(&rp->rph->ref, i);
2247 free_rp_inst(rp);
2248 return -ENOMEM;
2249 }
2250 inst->rph = rp->rph;
2251 freelist_add(&inst->freelist, &rp->freelist);
2252 }
2253 refcount_set(&rp->rph->ref, i);
2254
2255 rp->nmissed = 0;
2256
2257 ret = register_kprobe(&rp->kp);
2258 if (ret != 0)
2259 free_rp_inst(rp);
2260 #endif
2261 return ret;
2262 }
2263 EXPORT_SYMBOL_GPL(register_kretprobe);
2264
2265 int register_kretprobes(struct kretprobe **rps, int num)
2266 {
2267 int ret = 0, i;
2268
2269 if (num <= 0)
2270 return -EINVAL;
2271 for (i = 0; i < num; i++) {
2272 ret = register_kretprobe(rps[i]);
2273 if (ret < 0) {
2274 if (i > 0)
2275 unregister_kretprobes(rps, i);
2276 break;
2277 }
2278 }
2279 return ret;
2280 }
2281 EXPORT_SYMBOL_GPL(register_kretprobes);
2282
2283 void unregister_kretprobe(struct kretprobe *rp)
2284 {
2285 unregister_kretprobes(&rp, 1);
2286 }
2287 EXPORT_SYMBOL_GPL(unregister_kretprobe);
2288
2289 void unregister_kretprobes(struct kretprobe **rps, int num)
2290 {
2291 int i;
2292
2293 if (num <= 0)
2294 return;
2295 mutex_lock(&kprobe_mutex);
2296 for (i = 0; i < num; i++) {
2297 if (__unregister_kprobe_top(&rps[i]->kp) < 0)
2298 rps[i]->kp.addr = NULL;
2299 #ifdef CONFIG_KRETPROBE_ON_RETHOOK
2300 rethook_free(rps[i]->rh);
2301 #else
2302 rps[i]->rph->rp = NULL;
2303 #endif
2304 }
2305 mutex_unlock(&kprobe_mutex);
2306
2307 synchronize_rcu();
2308 for (i = 0; i < num; i++) {
2309 if (rps[i]->kp.addr) {
2310 __unregister_kprobe_bottom(&rps[i]->kp);
2311 #ifndef CONFIG_KRETPROBE_ON_RETHOOK
2312 free_rp_inst(rps[i]);
2313 #endif
2314 }
2315 }
2316 }
2317 EXPORT_SYMBOL_GPL(unregister_kretprobes);
2318
2319 #else
2320 int register_kretprobe(struct kretprobe *rp)
2321 {
2322 return -EOPNOTSUPP;
2323 }
2324 EXPORT_SYMBOL_GPL(register_kretprobe);
2325
2326 int register_kretprobes(struct kretprobe **rps, int num)
2327 {
2328 return -EOPNOTSUPP;
2329 }
2330 EXPORT_SYMBOL_GPL(register_kretprobes);
2331
2332 void unregister_kretprobe(struct kretprobe *rp)
2333 {
2334 }
2335 EXPORT_SYMBOL_GPL(unregister_kretprobe);
2336
2337 void unregister_kretprobes(struct kretprobe **rps, int num)
2338 {
2339 }
2340 EXPORT_SYMBOL_GPL(unregister_kretprobes);
2341
2342 static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
2343 {
2344 return 0;
2345 }
2346 NOKPROBE_SYMBOL(pre_handler_kretprobe);
2347
2348 #endif
2349
2350
2351 static void kill_kprobe(struct kprobe *p)
2352 {
2353 struct kprobe *kp;
2354
2355 lockdep_assert_held(&kprobe_mutex);
2356
2357 p->flags |= KPROBE_FLAG_GONE;
2358 if (kprobe_aggrprobe(p)) {
2359
2360
2361
2362
2363 list_for_each_entry(kp, &p->list, list)
2364 kp->flags |= KPROBE_FLAG_GONE;
2365 p->post_handler = NULL;
2366 kill_optimized_kprobe(p);
2367 }
2368
2369
2370
2371
2372 arch_remove_kprobe(p);
2373
2374
2375
2376
2377
2378
2379 if (kprobe_ftrace(p) && !kprobe_disabled(p) && !kprobes_all_disarmed)
2380 disarm_kprobe_ftrace(p);
2381 }
2382
2383
2384 int disable_kprobe(struct kprobe *kp)
2385 {
2386 int ret = 0;
2387 struct kprobe *p;
2388
2389 mutex_lock(&kprobe_mutex);
2390
2391
2392 p = __disable_kprobe(kp);
2393 if (IS_ERR(p))
2394 ret = PTR_ERR(p);
2395
2396 mutex_unlock(&kprobe_mutex);
2397 return ret;
2398 }
2399 EXPORT_SYMBOL_GPL(disable_kprobe);
2400
2401
2402 int enable_kprobe(struct kprobe *kp)
2403 {
2404 int ret = 0;
2405 struct kprobe *p;
2406
2407 mutex_lock(&kprobe_mutex);
2408
2409
2410 p = __get_valid_kprobe(kp);
2411 if (unlikely(p == NULL)) {
2412 ret = -EINVAL;
2413 goto out;
2414 }
2415
2416 if (kprobe_gone(kp)) {
2417
2418 ret = -EINVAL;
2419 goto out;
2420 }
2421
2422 if (p != kp)
2423 kp->flags &= ~KPROBE_FLAG_DISABLED;
2424
2425 if (!kprobes_all_disarmed && kprobe_disabled(p)) {
2426 p->flags &= ~KPROBE_FLAG_DISABLED;
2427 ret = arm_kprobe(p);
2428 if (ret)
2429 p->flags |= KPROBE_FLAG_DISABLED;
2430 }
2431 out:
2432 mutex_unlock(&kprobe_mutex);
2433 return ret;
2434 }
2435 EXPORT_SYMBOL_GPL(enable_kprobe);
2436
2437
2438 void dump_kprobe(struct kprobe *kp)
2439 {
2440 pr_err("Dump kprobe:\n.symbol_name = %s, .offset = %x, .addr = %pS\n",
2441 kp->symbol_name, kp->offset, kp->addr);
2442 }
2443 NOKPROBE_SYMBOL(dump_kprobe);
2444
2445 int kprobe_add_ksym_blacklist(unsigned long entry)
2446 {
2447 struct kprobe_blacklist_entry *ent;
2448 unsigned long offset = 0, size = 0;
2449
2450 if (!kernel_text_address(entry) ||
2451 !kallsyms_lookup_size_offset(entry, &size, &offset))
2452 return -EINVAL;
2453
2454 ent = kmalloc(sizeof(*ent), GFP_KERNEL);
2455 if (!ent)
2456 return -ENOMEM;
2457 ent->start_addr = entry;
2458 ent->end_addr = entry + size;
2459 INIT_LIST_HEAD(&ent->list);
2460 list_add_tail(&ent->list, &kprobe_blacklist);
2461
2462 return (int)size;
2463 }
2464
2465
2466 int kprobe_add_area_blacklist(unsigned long start, unsigned long end)
2467 {
2468 unsigned long entry;
2469 int ret = 0;
2470
2471 for (entry = start; entry < end; entry += ret) {
2472 ret = kprobe_add_ksym_blacklist(entry);
2473 if (ret < 0)
2474 return ret;
2475 if (ret == 0)
2476 ret = 1;
2477 }
2478 return 0;
2479 }
2480
2481
2482 static void kprobe_remove_area_blacklist(unsigned long start, unsigned long end)
2483 {
2484 struct kprobe_blacklist_entry *ent, *n;
2485
2486 list_for_each_entry_safe(ent, n, &kprobe_blacklist, list) {
2487 if (ent->start_addr < start || ent->start_addr >= end)
2488 continue;
2489 list_del(&ent->list);
2490 kfree(ent);
2491 }
2492 }
2493
2494 static void kprobe_remove_ksym_blacklist(unsigned long entry)
2495 {
2496 kprobe_remove_area_blacklist(entry, entry + 1);
2497 }
2498
2499 int __weak arch_kprobe_get_kallsym(unsigned int *symnum, unsigned long *value,
2500 char *type, char *sym)
2501 {
2502 return -ERANGE;
2503 }
2504
2505 int kprobe_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
2506 char *sym)
2507 {
2508 #ifdef __ARCH_WANT_KPROBES_INSN_SLOT
2509 if (!kprobe_cache_get_kallsym(&kprobe_insn_slots, &symnum, value, type, sym))
2510 return 0;
2511 #ifdef CONFIG_OPTPROBES
2512 if (!kprobe_cache_get_kallsym(&kprobe_optinsn_slots, &symnum, value, type, sym))
2513 return 0;
2514 #endif
2515 #endif
2516 if (!arch_kprobe_get_kallsym(&symnum, value, type, sym))
2517 return 0;
2518 return -ERANGE;
2519 }
2520
2521 int __init __weak arch_populate_kprobe_blacklist(void)
2522 {
2523 return 0;
2524 }
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534 static int __init populate_kprobe_blacklist(unsigned long *start,
2535 unsigned long *end)
2536 {
2537 unsigned long entry;
2538 unsigned long *iter;
2539 int ret;
2540
2541 for (iter = start; iter < end; iter++) {
2542 entry = (unsigned long)dereference_symbol_descriptor((void *)*iter);
2543 ret = kprobe_add_ksym_blacklist(entry);
2544 if (ret == -EINVAL)
2545 continue;
2546 if (ret < 0)
2547 return ret;
2548 }
2549
2550
2551 ret = kprobe_add_area_blacklist((unsigned long)__kprobes_text_start,
2552 (unsigned long)__kprobes_text_end);
2553 if (ret)
2554 return ret;
2555
2556
2557 ret = kprobe_add_area_blacklist((unsigned long)__noinstr_text_start,
2558 (unsigned long)__noinstr_text_end);
2559
2560 return ret ? : arch_populate_kprobe_blacklist();
2561 }
2562
2563 static void add_module_kprobe_blacklist(struct module *mod)
2564 {
2565 unsigned long start, end;
2566 int i;
2567
2568 if (mod->kprobe_blacklist) {
2569 for (i = 0; i < mod->num_kprobe_blacklist; i++)
2570 kprobe_add_ksym_blacklist(mod->kprobe_blacklist[i]);
2571 }
2572
2573 start = (unsigned long)mod->kprobes_text_start;
2574 if (start) {
2575 end = start + mod->kprobes_text_size;
2576 kprobe_add_area_blacklist(start, end);
2577 }
2578
2579 start = (unsigned long)mod->noinstr_text_start;
2580 if (start) {
2581 end = start + mod->noinstr_text_size;
2582 kprobe_add_area_blacklist(start, end);
2583 }
2584 }
2585
2586 static void remove_module_kprobe_blacklist(struct module *mod)
2587 {
2588 unsigned long start, end;
2589 int i;
2590
2591 if (mod->kprobe_blacklist) {
2592 for (i = 0; i < mod->num_kprobe_blacklist; i++)
2593 kprobe_remove_ksym_blacklist(mod->kprobe_blacklist[i]);
2594 }
2595
2596 start = (unsigned long)mod->kprobes_text_start;
2597 if (start) {
2598 end = start + mod->kprobes_text_size;
2599 kprobe_remove_area_blacklist(start, end);
2600 }
2601
2602 start = (unsigned long)mod->noinstr_text_start;
2603 if (start) {
2604 end = start + mod->noinstr_text_size;
2605 kprobe_remove_area_blacklist(start, end);
2606 }
2607 }
2608
2609
2610 static int kprobes_module_callback(struct notifier_block *nb,
2611 unsigned long val, void *data)
2612 {
2613 struct module *mod = data;
2614 struct hlist_head *head;
2615 struct kprobe *p;
2616 unsigned int i;
2617 int checkcore = (val == MODULE_STATE_GOING);
2618
2619 if (val == MODULE_STATE_COMING) {
2620 mutex_lock(&kprobe_mutex);
2621 add_module_kprobe_blacklist(mod);
2622 mutex_unlock(&kprobe_mutex);
2623 }
2624 if (val != MODULE_STATE_GOING && val != MODULE_STATE_LIVE)
2625 return NOTIFY_DONE;
2626
2627
2628
2629
2630
2631
2632
2633 mutex_lock(&kprobe_mutex);
2634 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2635 head = &kprobe_table[i];
2636 hlist_for_each_entry(p, head, hlist)
2637 if (within_module_init((unsigned long)p->addr, mod) ||
2638 (checkcore &&
2639 within_module_core((unsigned long)p->addr, mod))) {
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651 kill_kprobe(p);
2652 }
2653 }
2654 if (val == MODULE_STATE_GOING)
2655 remove_module_kprobe_blacklist(mod);
2656 mutex_unlock(&kprobe_mutex);
2657 return NOTIFY_DONE;
2658 }
2659
2660 static struct notifier_block kprobe_module_nb = {
2661 .notifier_call = kprobes_module_callback,
2662 .priority = 0
2663 };
2664
2665 void kprobe_free_init_mem(void)
2666 {
2667 void *start = (void *)(&__init_begin);
2668 void *end = (void *)(&__init_end);
2669 struct hlist_head *head;
2670 struct kprobe *p;
2671 int i;
2672
2673 mutex_lock(&kprobe_mutex);
2674
2675
2676 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2677 head = &kprobe_table[i];
2678 hlist_for_each_entry(p, head, hlist) {
2679 if (start <= (void *)p->addr && (void *)p->addr < end)
2680 kill_kprobe(p);
2681 }
2682 }
2683
2684 mutex_unlock(&kprobe_mutex);
2685 }
2686
2687 static int __init init_kprobes(void)
2688 {
2689 int i, err = 0;
2690
2691
2692
2693 for (i = 0; i < KPROBE_TABLE_SIZE; i++)
2694 INIT_HLIST_HEAD(&kprobe_table[i]);
2695
2696 err = populate_kprobe_blacklist(__start_kprobe_blacklist,
2697 __stop_kprobe_blacklist);
2698 if (err)
2699 pr_err("Failed to populate blacklist (error %d), kprobes not restricted, be careful using them!\n", err);
2700
2701 if (kretprobe_blacklist_size) {
2702
2703 for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
2704 kretprobe_blacklist[i].addr =
2705 kprobe_lookup_name(kretprobe_blacklist[i].name, 0);
2706 if (!kretprobe_blacklist[i].addr)
2707 pr_err("Failed to lookup symbol '%s' for kretprobe blacklist. Maybe the target function is removed or renamed.\n",
2708 kretprobe_blacklist[i].name);
2709 }
2710 }
2711
2712
2713 kprobes_all_disarmed = false;
2714
2715 #if defined(CONFIG_OPTPROBES) && defined(__ARCH_WANT_KPROBES_INSN_SLOT)
2716
2717 kprobe_optinsn_slots.insn_size = MAX_OPTINSN_SIZE;
2718 #endif
2719
2720 err = arch_init_kprobes();
2721 if (!err)
2722 err = register_die_notifier(&kprobe_exceptions_nb);
2723 if (!err)
2724 err = register_module_notifier(&kprobe_module_nb);
2725
2726 kprobes_initialized = (err == 0);
2727 kprobe_sysctls_init();
2728 return err;
2729 }
2730 early_initcall(init_kprobes);
2731
2732 #if defined(CONFIG_OPTPROBES)
2733 static int __init init_optprobes(void)
2734 {
2735
2736
2737
2738
2739
2740 optimize_all_kprobes();
2741
2742 return 0;
2743 }
2744 subsys_initcall(init_optprobes);
2745 #endif
2746
2747 #ifdef CONFIG_DEBUG_FS
2748 static void report_probe(struct seq_file *pi, struct kprobe *p,
2749 const char *sym, int offset, char *modname, struct kprobe *pp)
2750 {
2751 char *kprobe_type;
2752 void *addr = p->addr;
2753
2754 if (p->pre_handler == pre_handler_kretprobe)
2755 kprobe_type = "r";
2756 else
2757 kprobe_type = "k";
2758
2759 if (!kallsyms_show_value(pi->file->f_cred))
2760 addr = NULL;
2761
2762 if (sym)
2763 seq_printf(pi, "%px %s %s+0x%x %s ",
2764 addr, kprobe_type, sym, offset,
2765 (modname ? modname : " "));
2766 else
2767 seq_printf(pi, "%px %s %pS ",
2768 addr, kprobe_type, p->addr);
2769
2770 if (!pp)
2771 pp = p;
2772 seq_printf(pi, "%s%s%s%s\n",
2773 (kprobe_gone(p) ? "[GONE]" : ""),
2774 ((kprobe_disabled(p) && !kprobe_gone(p)) ? "[DISABLED]" : ""),
2775 (kprobe_optimized(pp) ? "[OPTIMIZED]" : ""),
2776 (kprobe_ftrace(pp) ? "[FTRACE]" : ""));
2777 }
2778
2779 static void *kprobe_seq_start(struct seq_file *f, loff_t *pos)
2780 {
2781 return (*pos < KPROBE_TABLE_SIZE) ? pos : NULL;
2782 }
2783
2784 static void *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos)
2785 {
2786 (*pos)++;
2787 if (*pos >= KPROBE_TABLE_SIZE)
2788 return NULL;
2789 return pos;
2790 }
2791
2792 static void kprobe_seq_stop(struct seq_file *f, void *v)
2793 {
2794
2795 }
2796
2797 static int show_kprobe_addr(struct seq_file *pi, void *v)
2798 {
2799 struct hlist_head *head;
2800 struct kprobe *p, *kp;
2801 const char *sym = NULL;
2802 unsigned int i = *(loff_t *) v;
2803 unsigned long offset = 0;
2804 char *modname, namebuf[KSYM_NAME_LEN];
2805
2806 head = &kprobe_table[i];
2807 preempt_disable();
2808 hlist_for_each_entry_rcu(p, head, hlist) {
2809 sym = kallsyms_lookup((unsigned long)p->addr, NULL,
2810 &offset, &modname, namebuf);
2811 if (kprobe_aggrprobe(p)) {
2812 list_for_each_entry_rcu(kp, &p->list, list)
2813 report_probe(pi, kp, sym, offset, modname, p);
2814 } else
2815 report_probe(pi, p, sym, offset, modname, NULL);
2816 }
2817 preempt_enable();
2818 return 0;
2819 }
2820
2821 static const struct seq_operations kprobes_sops = {
2822 .start = kprobe_seq_start,
2823 .next = kprobe_seq_next,
2824 .stop = kprobe_seq_stop,
2825 .show = show_kprobe_addr
2826 };
2827
2828 DEFINE_SEQ_ATTRIBUTE(kprobes);
2829
2830
2831 static void *kprobe_blacklist_seq_start(struct seq_file *m, loff_t *pos)
2832 {
2833 mutex_lock(&kprobe_mutex);
2834 return seq_list_start(&kprobe_blacklist, *pos);
2835 }
2836
2837 static void *kprobe_blacklist_seq_next(struct seq_file *m, void *v, loff_t *pos)
2838 {
2839 return seq_list_next(v, &kprobe_blacklist, pos);
2840 }
2841
2842 static int kprobe_blacklist_seq_show(struct seq_file *m, void *v)
2843 {
2844 struct kprobe_blacklist_entry *ent =
2845 list_entry(v, struct kprobe_blacklist_entry, list);
2846
2847
2848
2849
2850
2851 if (!kallsyms_show_value(m->file->f_cred))
2852 seq_printf(m, "0x%px-0x%px\t%ps\n", NULL, NULL,
2853 (void *)ent->start_addr);
2854 else
2855 seq_printf(m, "0x%px-0x%px\t%ps\n", (void *)ent->start_addr,
2856 (void *)ent->end_addr, (void *)ent->start_addr);
2857 return 0;
2858 }
2859
2860 static void kprobe_blacklist_seq_stop(struct seq_file *f, void *v)
2861 {
2862 mutex_unlock(&kprobe_mutex);
2863 }
2864
2865 static const struct seq_operations kprobe_blacklist_sops = {
2866 .start = kprobe_blacklist_seq_start,
2867 .next = kprobe_blacklist_seq_next,
2868 .stop = kprobe_blacklist_seq_stop,
2869 .show = kprobe_blacklist_seq_show,
2870 };
2871 DEFINE_SEQ_ATTRIBUTE(kprobe_blacklist);
2872
2873 static int arm_all_kprobes(void)
2874 {
2875 struct hlist_head *head;
2876 struct kprobe *p;
2877 unsigned int i, total = 0, errors = 0;
2878 int err, ret = 0;
2879
2880 mutex_lock(&kprobe_mutex);
2881
2882
2883 if (!kprobes_all_disarmed)
2884 goto already_enabled;
2885
2886
2887
2888
2889
2890
2891 kprobes_all_disarmed = false;
2892
2893 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2894 head = &kprobe_table[i];
2895
2896 hlist_for_each_entry(p, head, hlist) {
2897 if (!kprobe_disabled(p)) {
2898 err = arm_kprobe(p);
2899 if (err) {
2900 errors++;
2901 ret = err;
2902 }
2903 total++;
2904 }
2905 }
2906 }
2907
2908 if (errors)
2909 pr_warn("Kprobes globally enabled, but failed to enable %d out of %d probes. Please check which kprobes are kept disabled via debugfs.\n",
2910 errors, total);
2911 else
2912 pr_info("Kprobes globally enabled\n");
2913
2914 already_enabled:
2915 mutex_unlock(&kprobe_mutex);
2916 return ret;
2917 }
2918
2919 static int disarm_all_kprobes(void)
2920 {
2921 struct hlist_head *head;
2922 struct kprobe *p;
2923 unsigned int i, total = 0, errors = 0;
2924 int err, ret = 0;
2925
2926 mutex_lock(&kprobe_mutex);
2927
2928
2929 if (kprobes_all_disarmed) {
2930 mutex_unlock(&kprobe_mutex);
2931 return 0;
2932 }
2933
2934 kprobes_all_disarmed = true;
2935
2936 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2937 head = &kprobe_table[i];
2938
2939 hlist_for_each_entry(p, head, hlist) {
2940 if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p)) {
2941 err = disarm_kprobe(p, false);
2942 if (err) {
2943 errors++;
2944 ret = err;
2945 }
2946 total++;
2947 }
2948 }
2949 }
2950
2951 if (errors)
2952 pr_warn("Kprobes globally disabled, but failed to disable %d out of %d probes. Please check which kprobes are kept enabled via debugfs.\n",
2953 errors, total);
2954 else
2955 pr_info("Kprobes globally disabled\n");
2956
2957 mutex_unlock(&kprobe_mutex);
2958
2959
2960 wait_for_kprobe_optimizer();
2961
2962 return ret;
2963 }
2964
2965
2966
2967
2968
2969
2970 static ssize_t read_enabled_file_bool(struct file *file,
2971 char __user *user_buf, size_t count, loff_t *ppos)
2972 {
2973 char buf[3];
2974
2975 if (!kprobes_all_disarmed)
2976 buf[0] = '1';
2977 else
2978 buf[0] = '0';
2979 buf[1] = '\n';
2980 buf[2] = 0x00;
2981 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
2982 }
2983
2984 static ssize_t write_enabled_file_bool(struct file *file,
2985 const char __user *user_buf, size_t count, loff_t *ppos)
2986 {
2987 bool enable;
2988 int ret;
2989
2990 ret = kstrtobool_from_user(user_buf, count, &enable);
2991 if (ret)
2992 return ret;
2993
2994 ret = enable ? arm_all_kprobes() : disarm_all_kprobes();
2995 if (ret)
2996 return ret;
2997
2998 return count;
2999 }
3000
3001 static const struct file_operations fops_kp = {
3002 .read = read_enabled_file_bool,
3003 .write = write_enabled_file_bool,
3004 .llseek = default_llseek,
3005 };
3006
3007 static int __init debugfs_kprobe_init(void)
3008 {
3009 struct dentry *dir;
3010
3011 dir = debugfs_create_dir("kprobes", NULL);
3012
3013 debugfs_create_file("list", 0400, dir, NULL, &kprobes_fops);
3014
3015 debugfs_create_file("enabled", 0600, dir, NULL, &fops_kp);
3016
3017 debugfs_create_file("blacklist", 0400, dir, NULL,
3018 &kprobe_blacklist_fops);
3019
3020 return 0;
3021 }
3022
3023 late_initcall(debugfs_kprobe_init);
3024 #endif