Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  *  Kernel Probes (KProbes)
0004  *
0005  * Copyright (C) IBM Corporation, 2002, 2004
0006  *
0007  * 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
0008  *      Probes initial implementation (includes suggestions from
0009  *      Rusty Russell).
0010  * 2004-Aug Updated by Prasanna S Panchamukhi <prasanna@in.ibm.com> with
0011  *      hlists and exceptions notifier as suggested by Andi Kleen.
0012  * 2004-July    Suparna Bhattacharya <suparna@in.ibm.com> added jumper probes
0013  *      interface to access function arguments.
0014  * 2004-Sep Prasanna S Panchamukhi <prasanna@in.ibm.com> Changed Kprobes
0015  *      exceptions notifier to be first on the priority list.
0016  * 2005-May Hien Nguyen <hien@us.ibm.com>, Jim Keniston
0017  *      <jkenisto@us.ibm.com> and Prasanna S Panchamukhi
0018  *      <prasanna@in.ibm.com> added function-return probes.
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 /* kprobe_table can be accessed by
0057  * - Normal hlist traversal and RCU add/del under 'kprobe_mutex' is held.
0058  * Or
0059  * - RCU hlist traversal under disabling preempt (breakpoint handlers)
0060  */
0061 static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
0062 
0063 /* NOTE: change this value only with 'kprobe_mutex' held */
0064 static bool kprobes_all_disarmed;
0065 
0066 /* This protects 'kprobe_table' and 'optimizing_list' */
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  * Blacklist -- list of 'struct kprobe_blacklist_entry' to store info where
0078  * kprobes can not probe.
0079  */
0080 static LIST_HEAD(kprobe_blacklist);
0081 
0082 #ifdef __ARCH_WANT_KPROBES_INSN_SLOT
0083 /*
0084  * 'kprobe::ainsn.insn' points to the copy of the instruction to be
0085  * single-stepped. x86_64, POWER4 and above have no-exec support and
0086  * stepping on the instruction on a vmalloced/kmalloced/data page
0087  * is a recipe for disaster
0088  */
0089 struct kprobe_insn_page {
0090     struct list_head list;
0091     kprobe_opcode_t *insns;     /* Page of instruction slots */
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      * Use module_alloc() so this page is within +/- 2GB of where the
0117      * kernel image and loaded module images reside. This is required
0118      * for most of the architectures.
0119      * (e.g. x86-64 needs this to handle the %rip-relative fixups.)
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  * __get_insn_slot() - Find a slot on an executable page for an instruction.
0142  * We allocate an executable page if there's no room on existing ones.
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     /* Since the slot array is not protected by rcu, we need a mutex */
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             /* kip->nused is broken. Fix it. */
0167             kip->nused = slots_per_page(c);
0168             WARN_ON(1);
0169         }
0170     }
0171     rcu_read_unlock();
0172 
0173     /* If there are any garbage slots, collect it and try again. */
0174     if (c->nr_garbage && collect_garbage_slots(c) == 0)
0175         goto retry;
0176 
0177     /* All out of space.  Need to allocate a new page. */
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     /* Record the perf ksymbol register event after adding the page */
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 /* Return true if all garbages are collected, otherwise false. */
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          * Page is no longer in use.  Free it unless
0212          * it's the last one.  We keep the last one
0213          * so as not to have to set it up again the
0214          * next time somebody inserts a probe.
0215          */
0216         if (!list_is_singular(&kip->list)) {
0217             /*
0218              * Record perf ksymbol unregister event before removing
0219              * the page.
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     /* Ensure no-one is interrupted on the garbages */
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;  /* we will collect all garbages */
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     /* Could not find this slot. */
0271     WARN_ON(1);
0272     kip = NULL;
0273 out:
0274     rcu_read_unlock();
0275     /* Mark and sweep: this may sleep */
0276     if (kip) {
0277         /* Check double free */
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  * Check given address is on the page of kprobe instruction slots.
0293  * This will be used for checking whether the address on a stack
0294  * is on a text area or not.
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 /* For optimized_kprobe buffer */
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     /* .insn_size is initialized later */
0354     .nr_garbage = 0,
0355 };
0356 #endif
0357 #endif
0358 
0359 /* We have preemption disabled.. so it is safe to use __ versions */
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  * This routine is called either:
0372  *  - under the 'kprobe_mutex' - during kprobe_[un]register().
0373  *              OR
0374  *  - with preemption disabled - from architecture specific code.
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 /* Return true if 'p' is an aggregator */
0395 static inline bool kprobe_aggrprobe(struct kprobe *p)
0396 {
0397     return p->pre_handler == aggr_pre_handler;
0398 }
0399 
0400 /* Return true if 'p' is unused */
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 /* Keep all fields in the kprobe consistent. */
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 /* NOTE: This is protected by 'kprobe_mutex'. */
0416 static bool kprobes_allow_optimization;
0417 
0418 /*
0419  * Call all 'kprobe::pre_handler' on the list, but ignores its return value.
0420  * This must be called from arch-dep optimized caller.
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 /* Free optimized instructions and optimized_kprobe */
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 /* Return true if the kprobe is ready for optimization. */
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 /* Return true if the kprobe is disarmed. Note: p must be on hash list */
0461 static inline bool kprobe_disarmed(struct kprobe *p)
0462 {
0463     struct optimized_kprobe *op;
0464 
0465     /* If kprobe is not aggr/opt probe, just return kprobe is disabled */
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 /* Return true if the probe is queued on (un)optimizing lists */
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  * Return an optimized kprobe whose optimizing code replaces
0489  * instructions including 'addr' (exclude breakpoint).
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     /* Don't check i == 0, since that is a breakpoint case. */
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 /* Optimization staging list, protected by 'kprobe_mutex' */
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  * Optimize (replace a breakpoint with a jump) kprobes listed on
0521  * 'optimizing_list'.
0522  */
0523 static void do_optimize_kprobes(void)
0524 {
0525     lockdep_assert_held(&text_mutex);
0526     /*
0527      * The optimization/unoptimization refers 'online_cpus' via
0528      * stop_machine() and cpu-hotplug modifies the 'online_cpus'.
0529      * And same time, 'text_mutex' will be held in cpu-hotplug and here.
0530      * This combination can cause a deadlock (cpu-hotplug tries to lock
0531      * 'text_mutex' but stop_machine() can not be done because
0532      * the 'online_cpus' has been changed)
0533      * To avoid this deadlock, caller must have locked cpu-hotplug
0534      * for preventing cpu-hotplug outside of 'text_mutex' locking.
0535      */
0536     lockdep_assert_cpus_held();
0537 
0538     /* Optimization never be done when disarmed */
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  * Unoptimize (replace a jump with a breakpoint and remove the breakpoint
0548  * if need) kprobes listed on 'unoptimizing_list'.
0549  */
0550 static void do_unoptimize_kprobes(void)
0551 {
0552     struct optimized_kprobe *op, *tmp;
0553 
0554     lockdep_assert_held(&text_mutex);
0555     /* See comment in do_optimize_kprobes() */
0556     lockdep_assert_cpus_held();
0557 
0558     /* Unoptimization must be done anytime */
0559     if (list_empty(&unoptimizing_list))
0560         return;
0561 
0562     arch_unoptimize_kprobes(&unoptimizing_list, &freeing_list);
0563     /* Loop on 'freeing_list' for disarming */
0564     list_for_each_entry_safe(op, tmp, &freeing_list, list) {
0565         /* Switching from detour code to origin */
0566         op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0567         /* Disarm probes if marked disabled */
0568         if (kprobe_disabled(&op->kp))
0569             arch_disarm_kprobe(&op->kp);
0570         if (kprobe_unused(&op->kp)) {
0571             /*
0572              * Remove unused probes from hash list. After waiting
0573              * for synchronization, these probes are reclaimed.
0574              * (reclaiming is done by do_free_cleaned_kprobes().)
0575              */
0576             hlist_del_rcu(&op->kp.hlist);
0577         } else
0578             list_del_init(&op->list);
0579     }
0580 }
0581 
0582 /* Reclaim all kprobes on the 'freeing_list' */
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              * This must not happen, but if there is a kprobe
0592              * still in use, keep it on kprobes hash list.
0593              */
0594             continue;
0595         }
0596         free_aggr_kprobe(&op->kp);
0597     }
0598 }
0599 
0600 /* Start optimizer after OPTIMIZE_DELAY passed */
0601 static void kick_kprobe_optimizer(void)
0602 {
0603     schedule_delayed_work(&optimizing_work, OPTIMIZE_DELAY);
0604 }
0605 
0606 /* Kprobe jump optimizer */
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      * Step 1: Unoptimize kprobes and collect cleaned (unused and disarmed)
0615      * kprobes before waiting for quiesence period.
0616      */
0617     do_unoptimize_kprobes();
0618 
0619     /*
0620      * Step 2: Wait for quiesence period to ensure all potentially
0621      * preempted tasks to have normally scheduled. Because optprobe
0622      * may modify multiple instructions, there is a chance that Nth
0623      * instruction is preempted. In that case, such tasks can return
0624      * to 2nd-Nth byte of jump instruction. This wait is for avoiding it.
0625      * Note that on non-preemptive kernel, this is transparently converted
0626      * to synchronoze_sched() to wait for all interrupts to have completed.
0627      */
0628     synchronize_rcu_tasks();
0629 
0630     /* Step 3: Optimize kprobes after quiesence period */
0631     do_optimize_kprobes();
0632 
0633     /* Step 4: Free cleaned kprobes after quiesence period */
0634     do_free_cleaned_kprobes();
0635 
0636     mutex_unlock(&text_mutex);
0637     cpus_read_unlock();
0638 
0639     /* Step 5: Kick optimizer again if needed */
0640     if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
0641         kick_kprobe_optimizer();
0642 
0643     mutex_unlock(&kprobe_mutex);
0644 }
0645 
0646 /* Wait for completing optimization and unoptimization */
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         /* This will also make 'optimizing_work' execute immmediately */
0655         flush_delayed_work(&optimizing_work);
0656         /* 'optimizing_work' might not have been queued yet, relax */
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 /* Optimize kprobe if p is ready to be optimized */
0678 static void optimize_kprobe(struct kprobe *p)
0679 {
0680     struct optimized_kprobe *op;
0681 
0682     /* Check if the kprobe is disabled or not ready for optimization. */
0683     if (!kprobe_optready(p) || !kprobes_allow_optimization ||
0684         (kprobe_disabled(p) || kprobes_all_disarmed))
0685         return;
0686 
0687     /* kprobes with 'post_handler' can not be optimized */
0688     if (p->post_handler)
0689         return;
0690 
0691     op = container_of(p, struct optimized_kprobe, kp);
0692 
0693     /* Check there is no other kprobes at the optimized instructions */
0694     if (arch_check_optimized_kprobe(op) < 0)
0695         return;
0696 
0697     /* Check if it is already optimized. */
0698     if (op->kp.flags & KPROBE_FLAG_OPTIMIZED) {
0699         if (optprobe_queued_unopt(op)) {
0700             /* This is under unoptimizing. Just dequeue the probe */
0701             list_del_init(&op->list);
0702         }
0703         return;
0704     }
0705     op->kp.flags |= KPROBE_FLAG_OPTIMIZED;
0706 
0707     /*
0708      * On the 'unoptimizing_list' and 'optimizing_list',
0709      * 'op' must have OPTIMIZED flag
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 /* Short cut to direct unoptimizing */
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 /* Unoptimize a kprobe if p is optimized */
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; /* This is not an optprobe nor optimized */
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             /* Queued in unoptimizing queue */
0741             if (force) {
0742                 /*
0743                  * Forcibly unoptimize the kprobe here, and queue it
0744                  * in the freeing list for release afterwards.
0745                  */
0746                 force_unoptimize_kprobe(op);
0747                 list_move(&op->list, &freeing_list);
0748             }
0749         } else {
0750             /* Dequeue from the optimizing queue */
0751             list_del_init(&op->list);
0752             op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0753         }
0754         return;
0755     }
0756 
0757     /* Optimized kprobe case */
0758     if (force) {
0759         /* Forcibly update the code: this is a special case */
0760         force_unoptimize_kprobe(op);
0761     } else {
0762         list_add(&op->list, &unoptimizing_list);
0763         kick_kprobe_optimizer();
0764     }
0765 }
0766 
0767 /* Cancel unoptimizing for reusing */
0768 static int reuse_unused_kprobe(struct kprobe *ap)
0769 {
0770     struct optimized_kprobe *op;
0771 
0772     /*
0773      * Unused kprobe MUST be on the way of delayed unoptimizing (means
0774      * there is still a relative jump) and disabled.
0775      */
0776     op = container_of(ap, struct optimized_kprobe, kp);
0777     WARN_ON_ONCE(list_empty(&op->list));
0778     /* Enable the probe again */
0779     ap->flags &= ~KPROBE_FLAG_DISABLED;
0780     /* Optimize it again. (remove from 'op->list') */
0781     if (!kprobe_optready(ap))
0782         return -EINVAL;
0783 
0784     optimize_kprobe(ap);
0785     return 0;
0786 }
0787 
0788 /* Remove optimized instructions */
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         /* Dequeue from the (un)optimization queue */
0796         list_del_init(&op->list);
0797     op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
0798 
0799     if (kprobe_unused(p)) {
0800         /* Enqueue if it is unused */
0801         list_add(&op->list, &freeing_list);
0802         /*
0803          * Remove unused probes from the hash list. After waiting
0804          * for synchronization, this probe is reclaimed.
0805          * (reclaiming is done by do_free_cleaned_kprobes().)
0806          */
0807         hlist_del_rcu(&op->kp.hlist);
0808     }
0809 
0810     /* Don't touch the code, because it is already freed. */
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 /* Try to prepare optimized instructions */
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 /* Allocate new optimized_kprobe and try to prepare optimized instructions. */
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  * Prepare an optimized_kprobe and optimize it.
0850  * NOTE: 'p' must be a normal registered kprobe.
0851  */
0852 static void try_to_optimize_kprobe(struct kprobe *p)
0853 {
0854     struct kprobe *ap;
0855     struct optimized_kprobe *op;
0856 
0857     /* Impossible to optimize ftrace-based kprobe. */
0858     if (kprobe_ftrace(p))
0859         return;
0860 
0861     /* For preparing optimization, jump_label_text_reserved() is called. */
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         /* If failed to setup optimizing, fallback to kprobe. */
0873         arch_remove_optimized_kprobe(op);
0874         kfree(op);
0875         goto out;
0876     }
0877 
0878     init_aggr_kprobe(ap, p);
0879     optimize_kprobe(ap);    /* This just kicks optimizer thread. */
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     /* If optimization is already allowed, just return. */
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     /* If optimization is already prohibited, just return. */
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     /* Wait for unoptimizing completion. */
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 /* CONFIG_SYSCTL */
0982 
0983 /* Put a breakpoint for a probe. */
0984 static void __arm_kprobe(struct kprobe *p)
0985 {
0986     struct kprobe *_p;
0987 
0988     lockdep_assert_held(&text_mutex);
0989 
0990     /* Find the overlapping optimized kprobes. */
0991     _p = get_optimized_kprobe(p->addr);
0992     if (unlikely(_p))
0993         /* Fallback to unoptimized kprobe */
0994         unoptimize_kprobe(_p, true);
0995 
0996     arch_arm_kprobe(p);
0997     optimize_kprobe(p); /* Try to optimize (add kprobe to a list) */
0998 }
0999 
1000 /* Remove the breakpoint of a probe. */
1001 static void __disarm_kprobe(struct kprobe *p, bool reopt)
1002 {
1003     struct kprobe *_p;
1004 
1005     lockdep_assert_held(&text_mutex);
1006 
1007     /* Try to unoptimize */
1008     unoptimize_kprobe(p, kprobes_all_disarmed);
1009 
1010     if (!kprobe_queued(p)) {
1011         arch_disarm_kprobe(p);
1012         /* If another kprobe was blocked, re-optimize it. */
1013         _p = get_optimized_kprobe(p->addr);
1014         if (unlikely(_p) && reopt)
1015             optimize_kprobe(_p);
1016     }
1017     /*
1018      * TODO: Since unoptimization and real disarming will be done by
1019      * the worker thread, we can not check whether another probe are
1020      * unoptimized because of this probe here. It should be re-optimized
1021      * by the worker thread.
1022      */
1023 }
1024 
1025 #else /* !CONFIG_OPTPROBES */
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      * If the optimized kprobe is NOT supported, the aggr kprobe is
1041      * released at the same time that the last aggregated kprobe is
1042      * unregistered.
1043      * Thus there should be no chance to reuse unused kprobe.
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 /* CONFIG_OPTPROBES */
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      * At this point, sinec ops is not registered, we should be sefe from
1098      * registering empty filter.
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   /* !CONFIG_KPROBES_ON_FTRACE */
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     /* Must ensure p->addr is really on ftrace */
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  * Aggregate handlers for multiple kprobes support - these handlers
1193  * take care of invoking the individual kprobe handlers on p->list
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 /* Walks the list and increments 'nmissed' if 'p' has child probes. */
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 /* Add the new probe to 'ap->list'. */
1261 static int add_new_kprobe(struct kprobe *ap, struct kprobe *p)
1262 {
1263     if (p->post_handler)
1264         unoptimize_kprobe(ap, true);    /* Fall back to normal kprobe */
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  * Fill in the required fields of the aggregator kprobe. Replace the
1275  * earlier kprobe in the hlist with the aggregator kprobe.
1276  */
1277 static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
1278 {
1279     /* Copy the insn slot of 'p' to 'ap'. */
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     /* We don't care the kprobe which has gone. */
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  * This registers the second or subsequent kprobe at the same address.
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     /* For preparing optimization, jump_label_text_reserved() is called */
1307     jump_label_lock();
1308     mutex_lock(&text_mutex);
1309 
1310     if (!kprobe_aggrprobe(orig_p)) {
1311         /* If 'orig_p' is not an 'aggr_kprobe', create new one. */
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         /* This probe is going to die. Rescue it */
1320         ret = reuse_unused_kprobe(ap);
1321         if (ret)
1322             goto out;
1323     }
1324 
1325     if (kprobe_gone(ap)) {
1326         /*
1327          * Attempting to insert new probe at the same location that
1328          * had a probe in the module vaddr area which already
1329          * freed. So, the instruction slot has already been
1330          * released. We need a new slot for the new probe.
1331          */
1332         ret = arch_prepare_kprobe(ap);
1333         if (ret)
1334             /*
1335              * Even if fail to allocate new slot, don't need to
1336              * free the 'ap'. It will be used next time, or
1337              * freed by unregister_kprobe().
1338              */
1339             goto out;
1340 
1341         /* Prepare optimized instructions if possible. */
1342         prepare_optimized_kprobe(ap);
1343 
1344         /*
1345          * Clear gone flag to prevent allocating new slot again, and
1346          * set disabled flag because it is not armed yet.
1347          */
1348         ap->flags = (ap->flags & ~KPROBE_FLAG_GONE)
1349                 | KPROBE_FLAG_DISABLED;
1350     }
1351 
1352     /* Copy the insn slot of 'p' to 'ap'. */
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             /* Arm the breakpoint again. */
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     /* The '__kprobes' functions and entry code must not be probed. */
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      * If 'kprobe_blacklist' is defined, check the address and
1391      * reject any probe registration in the prohibited area.
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     /* Check if the address is on a suffixed-symbol */
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  * arch_adjust_kprobe_addr - adjust the address
1422  * @addr: symbol base address
1423  * @offset: offset within the symbol
1424  * @on_func_entry: was this @addr+@offset on the function entry
1425  *
1426  * Typically returns @addr + @offset, except for special cases where the
1427  * function might be prefixed by a CFI landing pad, in that case any offset
1428  * inside the landing pad is mapped to the first 'real' instruction of the
1429  * symbol.
1430  *
1431  * Specifically, for things like IBT/BTI, skip the resp. ENDBR/BTI.C
1432  * instruction at +0.
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  * If 'symbol_name' is specified, look it up and add the 'offset'
1444  * to it. This way, we can specify a relative address to a symbol.
1445  * This returns encoded errors if it fails to look up symbol or invalid
1446  * combination of parameters.
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          * Input: @sym + @offset
1458          * Output: @addr + @offset
1459          *
1460          * NOTE: kprobe_lookup_name() does *NOT* fold the offset
1461          *       argument into it's output!
1462          */
1463         addr = kprobe_lookup_name(symbol_name, offset);
1464         if (!addr)
1465             return ERR_PTR(-ENOENT);
1466     }
1467 
1468     /*
1469      * So here we have @addr + @offset, displace it into a new
1470      * @addr' + @offset' where @addr' is the symbol start address.
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      * Then ask the architecture to re-combine them, taking care of
1479      * magical function entry details while telling us if this was indeed
1480      * at the start of the function.
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  * Check the 'p' is valid and return the aggregator kprobe
1498  * at the same address.
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             /* kprobe p is a valid probe */
1514                 goto valid;
1515         return NULL;
1516     }
1517 valid:
1518     return ap;
1519 }
1520 
1521 /*
1522  * Warn and return error if the kprobe is being re-registered since
1523  * there must be a software bug.
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   /* !CONFIG_KPROBES_ON_FTRACE */
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     /* Ensure it is not in reserved area nor out of text */
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     /* Check if 'p' is probing a module. */
1575     *probed_mod = __module_text_address((unsigned long) p->addr);
1576     if (*probed_mod) {
1577         /*
1578          * We must hold a refcount of the probed module while updating
1579          * its code to prohibit unexpected unloading.
1580          */
1581         if (unlikely(!try_module_get(*probed_mod))) {
1582             ret = -ENOENT;
1583             goto out;
1584         }
1585 
1586         /*
1587          * If the module freed '.init.text', we couldn't insert
1588          * kprobes in there.
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     /* Adjust probe address from symbol */
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     /* User can pass only KPROBE_FLAG_DISABLED to register_kprobe */
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         /* Since this may unoptimize 'old_p', locking 'text_mutex'. */
1635         ret = register_aggr_kprobe(old_p, p);
1636         goto out;
1637     }
1638 
1639     cpus_read_lock();
1640     /* Prevent text modification */
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     /* Try to optimize kprobe */
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 /* Check if all probes on the 'ap' are disabled. */
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              * Since there is an active probe on the list,
1684              * we can't disable this 'ap'.
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     /* Get an original kprobe for return */
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         /* Disable probe if it is a child probe */
1705         if (p != orig_p)
1706             p->flags |= KPROBE_FLAG_DISABLED;
1707 
1708         /* Try to disarm and disable this/parent probe */
1709         if (p == orig_p || aggr_kprobe_disabled(orig_p)) {
1710             /*
1711              * Don't be lazy here.  Even if 'kprobes_all_disarmed'
1712              * is false, 'orig_p' might not have been armed yet.
1713              * Note arm_all_kprobes() __tries__ to arm all kprobes
1714              * on the best effort basis.
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  * Unregister a kprobe without a scheduler synchronization.
1732  */
1733 static int __unregister_kprobe_top(struct kprobe *p)
1734 {
1735     struct kprobe *ap, *list_p;
1736 
1737     /* Disable kprobe. This will disarm it if needed. */
1738     ap = __disable_kprobe(p);
1739     if (IS_ERR(ap))
1740         return PTR_ERR(ap);
1741 
1742     if (ap == p)
1743         /*
1744          * This probe is an independent(and non-optimized) kprobe
1745          * (not an aggrprobe). Remove from the hash list.
1746          */
1747         goto disarmed;
1748 
1749     /* Following process expects this probe is an aggrprobe */
1750     WARN_ON(!kprobe_aggrprobe(ap));
1751 
1752     if (list_is_singular(&ap->list) && kprobe_disarmed(ap))
1753         /*
1754          * !disarmed could be happen if the probe is under delayed
1755          * unoptimizing.
1756          */
1757         goto disarmed;
1758     else {
1759         /* If disabling probe has special handlers, update aggrprobe */
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          * Remove from the aggrprobe: this path will do nothing in
1770          * __unregister_kprobe_bottom().
1771          */
1772         list_del_rcu(&p->list);
1773         if (!kprobe_disabled(ap) && !kprobes_all_disarmed)
1774             /*
1775              * Try to optimize this probe again, because post
1776              * handler may have been changed.
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         /* This is an independent kprobe */
1793         arch_remove_kprobe(p);
1794     else if (list_is_singular(&p->list)) {
1795         /* This is the last child of an aggrprobe */
1796         ap = list_entry(p->list.next, struct kprobe, list);
1797         list_del(&p->list);
1798         free_aggr_kprobe(ap);
1799     }
1800     /* Otherwise, do nothing. */
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 /* we need to be notified first */
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  * This function is called from delayed_put_task_struct() when a task is
1884  * dead and cleaned up to recycle any kretprobe instances associated with
1885  * this task. These left over instances represent probed functions that
1886  * have been called but will never return.
1887  */
1888 void kprobe_flush_task(struct task_struct *tk)
1889 {
1890     struct kretprobe_instance *ri;
1891     struct llist_node *node;
1892 
1893     /* Early boot, not yet initialized. */
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 /* This assumes the 'tsk' is the current task or the is not running. */
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  * kretprobe_find_ret_addr -- Find correct return address modified by kretprobe
1958  * @tsk: Target task
1959  * @fp: A frame pointer
1960  * @cur: a storage of the loop cursor llist_node pointer for next call
1961  *
1962  * Find the correct return address modified by a kretprobe on @tsk in unsigned
1963  * long type. If it finds the return address, this returns that address value,
1964  * or this returns 0.
1965  * The @tsk must be 'current' or a task which is not running. @fp is a hint
1966  * to get the currect return address - which is compared with the
1967  * kretprobe_instance::fp field. The @cur is a loop cursor for searching the
1968  * kretprobe return addresses on the @tsk. The '*@cur' should be NULL at the
1969  * first call, but '@cur' itself must NOT NULL.
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      * Do nothing by default. Please fill this to update the fake return
1996      * address on the stack with the correct one on each arch if possible.
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     /* Find correct address and all nodes for this frame. */
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      * Set the return address as the instruction pointer, because if the
2017      * user handler calls stack_trace_save_regs() with this 'regs',
2018      * the stack trace will start from the instruction pointer.
2019      */
2020     instruction_pointer_set(regs, (unsigned long)correct_ret_addr);
2021 
2022     /* Run the user handler of the nodes. */
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     /* Unlink all nodes for this frame. */
2048     first = current->kretprobe_instances.first;
2049     current->kretprobe_instances.first = node->next;
2050     node->next = NULL;
2051 
2052     /* Recycle free instances. */
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  * This kprobe pre_handler is registered with every kretprobe. When probe
2066  * hits it will set up the return probe.
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, &current->kretprobe_instances);
2090 
2091     return 0;
2092 }
2093 NOKPROBE_SYMBOL(pre_handler_kretprobe);
2094 #else /* CONFIG_KRETPROBE_ON_RETHOOK */
2095 /*
2096  * This kprobe pre_handler is registered with every kretprobe. When probe
2097  * hits it will set up the return probe.
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     /* The data must NOT be null. This means rethook data structure is broken. */
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 /* !CONFIG_KRETPROBE_ON_RETHOOK */
2145 
2146 /**
2147  * kprobe_on_func_entry() -- check whether given address is function entry
2148  * @addr: Target address
2149  * @sym:  Target symbol name
2150  * @offset: The offset from the symbol or the address
2151  *
2152  * This checks whether the given @addr+@offset or @sym+@offset is on the
2153  * function entry address or not.
2154  * This returns 0 if it is the function entry, or -EINVAL if it is not.
2155  * And also it returns -ENOENT if it fails the symbol or address lookup.
2156  * Caller must pass @addr or @sym (either one must be NULL), or this
2157  * returns -EINVAL.
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     /* If only 'rp->kp.addr' is specified, check reregistering kprobes */
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     /* Pre-allocate memory for max kretprobe instances */
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     /* Establish function entry probe point */
2230     ret = register_kprobe(&rp->kp);
2231     if (ret != 0) {
2232         rethook_free(rp->rh);
2233         rp->rh = NULL;
2234     }
2235 #else   /* !CONFIG_KRETPROBE_ON_RETHOOK */
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     /* Establish function entry probe point */
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 /* CONFIG_KRETPROBES */
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 /* CONFIG_KRETPROBES */
2349 
2350 /* Set the kprobe gone and remove its instruction buffer. */
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          * If this is an aggr_kprobe, we have to list all the
2361          * chained probes and mark them GONE.
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      * Here, we can remove insn_slot safely, because no thread calls
2370      * the original probed function (which will be freed soon) any more.
2371      */
2372     arch_remove_kprobe(p);
2373 
2374     /*
2375      * The module is going away. We should disarm the kprobe which
2376      * is using ftrace, because ftrace framework is still available at
2377      * 'MODULE_STATE_GOING' notification.
2378      */
2379     if (kprobe_ftrace(p) && !kprobe_disabled(p) && !kprobes_all_disarmed)
2380         disarm_kprobe_ftrace(p);
2381 }
2382 
2383 /* Disable one kprobe */
2384 int disable_kprobe(struct kprobe *kp)
2385 {
2386     int ret = 0;
2387     struct kprobe *p;
2388 
2389     mutex_lock(&kprobe_mutex);
2390 
2391     /* Disable this kprobe */
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 /* Enable one kprobe */
2402 int enable_kprobe(struct kprobe *kp)
2403 {
2404     int ret = 0;
2405     struct kprobe *p;
2406 
2407     mutex_lock(&kprobe_mutex);
2408 
2409     /* Check whether specified probe is valid. */
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         /* This kprobe has gone, we couldn't enable it. */
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 /* Caller must NOT call this in usual path. This is only for critical case */
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 /* Add all symbols in given area into kprobe blacklist */
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)   /* In case of alias symbol */
2476             ret = 1;
2477     }
2478     return 0;
2479 }
2480 
2481 /* Remove all symbols in given area from kprobe blacklist */
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  * Lookup and populate the kprobe_blacklist.
2528  *
2529  * Unlike the kretprobe blacklist, we'll need to determine
2530  * the range of addresses that belong to the said functions,
2531  * since a kprobe need not necessarily be at the beginning
2532  * of a function.
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     /* Symbols in '__kprobes_text' are blacklisted */
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     /* Symbols in 'noinstr' section are blacklisted */
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 /* Module notifier call back, checking kprobes on the module */
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      * When 'MODULE_STATE_GOING' was notified, both of module '.text' and
2629      * '.init.text' sections would be freed. When 'MODULE_STATE_LIVE' was
2630      * notified, only '.init.text' section would be freed. We need to
2631      * disable kprobes which have been inserted in the sections.
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                  * The vaddr this probe is installed will soon
2642                  * be vfreed buy not synced to disk. Hence,
2643                  * disarming the breakpoint isn't needed.
2644                  *
2645                  * Note, this will also move any optimized probes
2646                  * that are pending to be removed from their
2647                  * corresponding lists to the 'freeing_list' and
2648                  * will not be touched by the delayed
2649                  * kprobe_optimizer() work handler.
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     /* Kill all kprobes on initmem because the target code has been freed. */
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     /* FIXME allocate the probe table, currently defined statically */
2692     /* initialize all list heads */
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         /* lookup the function address from its name */
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     /* By default, kprobes are armed */
2713     kprobes_all_disarmed = false;
2714 
2715 #if defined(CONFIG_OPTPROBES) && defined(__ARCH_WANT_KPROBES_INSN_SLOT)
2716     /* Init 'kprobe_optinsn_slots' for allocation */
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      * Enable kprobe optimization - this kicks the optimizer which
2737      * depends on synchronize_rcu_tasks() and ksoftirqd, that is
2738      * not spawned in early initcall. So delay the optimization.
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    /* try to use %pS */
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     /* Nothing to do */
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 /* kprobes/blacklist -- shows which functions can not be probed */
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      * If '/proc/kallsyms' is not showing kernel address, we won't
2849      * show them here either.
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     /* If kprobes are armed, just return */
2883     if (!kprobes_all_disarmed)
2884         goto already_enabled;
2885 
2886     /*
2887      * optimize_kprobe() called by arm_kprobe() checks
2888      * kprobes_all_disarmed, so set kprobes_all_disarmed before
2889      * arm_kprobe.
2890      */
2891     kprobes_all_disarmed = false;
2892     /* Arming kprobes doesn't optimize kprobe itself */
2893     for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
2894         head = &kprobe_table[i];
2895         /* Arm all kprobes on a best-effort basis */
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     /* If kprobes are already disarmed, just return */
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         /* Disarm all kprobes on a best-effort basis */
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     /* Wait for disarming all kprobes by optimizer */
2960     wait_for_kprobe_optimizer();
2961 
2962     return ret;
2963 }
2964 
2965 /*
2966  * XXX: The debugfs bool file interface doesn't allow for callbacks
2967  * when the bool state is switched. We can reuse that facility when
2968  * available
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 /* CONFIG_DEBUG_FS */