Root/kernel/kprobes.c

1/*
2 * Kernel Probes (KProbes)
3 * kernel/kprobes.c
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 *
19 * Copyright (C) IBM Corporation, 2002, 2004
20 *
21 * 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
22 * Probes initial implementation (includes suggestions from
23 * Rusty Russell).
24 * 2004-Aug Updated by Prasanna S Panchamukhi <prasanna@in.ibm.com> with
25 * hlists and exceptions notifier as suggested by Andi Kleen.
26 * 2004-July Suparna Bhattacharya <suparna@in.ibm.com> added jumper probes
27 * interface to access function arguments.
28 * 2004-Sep Prasanna S Panchamukhi <prasanna@in.ibm.com> Changed Kprobes
29 * exceptions notifier to be first on the priority list.
30 * 2005-May Hien Nguyen <hien@us.ibm.com>, Jim Keniston
31 * <jkenisto@us.ibm.com> and Prasanna S Panchamukhi
32 * <prasanna@in.ibm.com> added function-return probes.
33 */
34#include <linux/kprobes.h>
35#include <linux/hash.h>
36#include <linux/init.h>
37#include <linux/slab.h>
38#include <linux/stddef.h>
39#include <linux/module.h>
40#include <linux/moduleloader.h>
41#include <linux/kallsyms.h>
42#include <linux/freezer.h>
43#include <linux/seq_file.h>
44#include <linux/debugfs.h>
45#include <linux/kdebug.h>
46#include <linux/memory.h>
47
48#include <asm-generic/sections.h>
49#include <asm/cacheflush.h>
50#include <asm/errno.h>
51#include <asm/uaccess.h>
52
53#define KPROBE_HASH_BITS 6
54#define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
55
56
57/*
58 * Some oddball architectures like 64bit powerpc have function descriptors
59 * so this must be overridable.
60 */
61#ifndef kprobe_lookup_name
62#define kprobe_lookup_name(name, addr) \
63    addr = ((kprobe_opcode_t *)(kallsyms_lookup_name(name)))
64#endif
65
66static int kprobes_initialized;
67static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
68static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
69
70/* NOTE: change this value only with kprobe_mutex held */
71static bool kprobes_all_disarmed;
72
73static DEFINE_MUTEX(kprobe_mutex); /* Protects kprobe_table */
74static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL;
75static struct {
76    spinlock_t lock ____cacheline_aligned_in_smp;
77} kretprobe_table_locks[KPROBE_TABLE_SIZE];
78
79static spinlock_t *kretprobe_table_lock_ptr(unsigned long hash)
80{
81    return &(kretprobe_table_locks[hash].lock);
82}
83
84/*
85 * Normally, functions that we'd want to prohibit kprobes in, are marked
86 * __kprobes. But, there are cases where such functions already belong to
87 * a different section (__sched for preempt_schedule)
88 *
89 * For such cases, we now have a blacklist
90 */
91static struct kprobe_blackpoint kprobe_blacklist[] = {
92    {"preempt_schedule",},
93    {NULL} /* Terminator */
94};
95
96#ifdef __ARCH_WANT_KPROBES_INSN_SLOT
97/*
98 * kprobe->ainsn.insn points to the copy of the instruction to be
99 * single-stepped. x86_64, POWER4 and above have no-exec support and
100 * stepping on the instruction on a vmalloced/kmalloced/data page
101 * is a recipe for disaster
102 */
103#define INSNS_PER_PAGE (PAGE_SIZE/(MAX_INSN_SIZE * sizeof(kprobe_opcode_t)))
104
105struct kprobe_insn_page {
106    struct list_head list;
107    kprobe_opcode_t *insns; /* Page of instruction slots */
108    char slot_used[INSNS_PER_PAGE];
109    int nused;
110    int ngarbage;
111};
112
113enum kprobe_slot_state {
114    SLOT_CLEAN = 0,
115    SLOT_DIRTY = 1,
116    SLOT_USED = 2,
117};
118
119static DEFINE_MUTEX(kprobe_insn_mutex); /* Protects kprobe_insn_pages */
120static LIST_HEAD(kprobe_insn_pages);
121static int kprobe_garbage_slots;
122static int collect_garbage_slots(void);
123
124static int __kprobes check_safety(void)
125{
126    int ret = 0;
127#if defined(CONFIG_PREEMPT) && defined(CONFIG_FREEZER)
128    ret = freeze_processes();
129    if (ret == 0) {
130        struct task_struct *p, *q;
131        do_each_thread(p, q) {
132            if (p != current && p->state == TASK_RUNNING &&
133                p->pid != 0) {
134                printk("Check failed: %s is running\n",p->comm);
135                ret = -1;
136                goto loop_end;
137            }
138        } while_each_thread(p, q);
139    }
140loop_end:
141    thaw_processes();
142#else
143    synchronize_sched();
144#endif
145    return ret;
146}
147
148/**
149 * __get_insn_slot() - Find a slot on an executable page for an instruction.
150 * We allocate an executable page if there's no room on existing ones.
151 */
152static kprobe_opcode_t __kprobes *__get_insn_slot(void)
153{
154    struct kprobe_insn_page *kip;
155
156 retry:
157    list_for_each_entry(kip, &kprobe_insn_pages, list) {
158        if (kip->nused < INSNS_PER_PAGE) {
159            int i;
160            for (i = 0; i < INSNS_PER_PAGE; i++) {
161                if (kip->slot_used[i] == SLOT_CLEAN) {
162                    kip->slot_used[i] = SLOT_USED;
163                    kip->nused++;
164                    return kip->insns + (i * MAX_INSN_SIZE);
165                }
166            }
167            /* Surprise! No unused slots. Fix kip->nused. */
168            kip->nused = INSNS_PER_PAGE;
169        }
170    }
171
172    /* If there are any garbage slots, collect it and try again. */
173    if (kprobe_garbage_slots && collect_garbage_slots() == 0) {
174        goto retry;
175    }
176    /* All out of space. Need to allocate a new page. Use slot 0. */
177    kip = kmalloc(sizeof(struct kprobe_insn_page), GFP_KERNEL);
178    if (!kip)
179        return NULL;
180
181    /*
182     * Use module_alloc so this page is within +/- 2GB of where the
183     * kernel image and loaded module images reside. This is required
184     * so x86_64 can correctly handle the %rip-relative fixups.
185     */
186    kip->insns = module_alloc(PAGE_SIZE);
187    if (!kip->insns) {
188        kfree(kip);
189        return NULL;
190    }
191    INIT_LIST_HEAD(&kip->list);
192    list_add(&kip->list, &kprobe_insn_pages);
193    memset(kip->slot_used, SLOT_CLEAN, INSNS_PER_PAGE);
194    kip->slot_used[0] = SLOT_USED;
195    kip->nused = 1;
196    kip->ngarbage = 0;
197    return kip->insns;
198}
199
200kprobe_opcode_t __kprobes *get_insn_slot(void)
201{
202    kprobe_opcode_t *ret;
203    mutex_lock(&kprobe_insn_mutex);
204    ret = __get_insn_slot();
205    mutex_unlock(&kprobe_insn_mutex);
206    return ret;
207}
208
209/* Return 1 if all garbages are collected, otherwise 0. */
210static int __kprobes collect_one_slot(struct kprobe_insn_page *kip, int idx)
211{
212    kip->slot_used[idx] = SLOT_CLEAN;
213    kip->nused--;
214    if (kip->nused == 0) {
215        /*
216         * Page is no longer in use. Free it unless
217         * it's the last one. We keep the last one
218         * so as not to have to set it up again the
219         * next time somebody inserts a probe.
220         */
221        if (!list_is_singular(&kprobe_insn_pages)) {
222            list_del(&kip->list);
223            module_free(NULL, kip->insns);
224            kfree(kip);
225        }
226        return 1;
227    }
228    return 0;
229}
230
231static int __kprobes collect_garbage_slots(void)
232{
233    struct kprobe_insn_page *kip, *next;
234
235    /* Ensure no-one is preepmted on the garbages */
236    if (check_safety())
237        return -EAGAIN;
238
239    list_for_each_entry_safe(kip, next, &kprobe_insn_pages, list) {
240        int i;
241        if (kip->ngarbage == 0)
242            continue;
243        kip->ngarbage = 0; /* we will collect all garbages */
244        for (i = 0; i < INSNS_PER_PAGE; i++) {
245            if (kip->slot_used[i] == SLOT_DIRTY &&
246                collect_one_slot(kip, i))
247                break;
248        }
249    }
250    kprobe_garbage_slots = 0;
251    return 0;
252}
253
254void __kprobes free_insn_slot(kprobe_opcode_t * slot, int dirty)
255{
256    struct kprobe_insn_page *kip;
257
258    mutex_lock(&kprobe_insn_mutex);
259    list_for_each_entry(kip, &kprobe_insn_pages, list) {
260        if (kip->insns <= slot &&
261            slot < kip->insns + (INSNS_PER_PAGE * MAX_INSN_SIZE)) {
262            int i = (slot - kip->insns) / MAX_INSN_SIZE;
263            if (dirty) {
264                kip->slot_used[i] = SLOT_DIRTY;
265                kip->ngarbage++;
266            } else
267                collect_one_slot(kip, i);
268            break;
269        }
270    }
271
272    if (dirty && ++kprobe_garbage_slots > INSNS_PER_PAGE)
273        collect_garbage_slots();
274
275    mutex_unlock(&kprobe_insn_mutex);
276}
277#endif
278
279/* We have preemption disabled.. so it is safe to use __ versions */
280static inline void set_kprobe_instance(struct kprobe *kp)
281{
282    __get_cpu_var(kprobe_instance) = kp;
283}
284
285static inline void reset_kprobe_instance(void)
286{
287    __get_cpu_var(kprobe_instance) = NULL;
288}
289
290/*
291 * This routine is called either:
292 * - under the kprobe_mutex - during kprobe_[un]register()
293 * OR
294 * - with preemption disabled - from arch/xxx/kernel/kprobes.c
295 */
296struct kprobe __kprobes *get_kprobe(void *addr)
297{
298    struct hlist_head *head;
299    struct hlist_node *node;
300    struct kprobe *p;
301
302    head = &kprobe_table[hash_ptr(addr, KPROBE_HASH_BITS)];
303    hlist_for_each_entry_rcu(p, node, head, hlist) {
304        if (p->addr == addr)
305            return p;
306    }
307    return NULL;
308}
309
310/* Arm a kprobe with text_mutex */
311static void __kprobes arm_kprobe(struct kprobe *kp)
312{
313    mutex_lock(&text_mutex);
314    arch_arm_kprobe(kp);
315    mutex_unlock(&text_mutex);
316}
317
318/* Disarm a kprobe with text_mutex */
319static void __kprobes disarm_kprobe(struct kprobe *kp)
320{
321    mutex_lock(&text_mutex);
322    arch_disarm_kprobe(kp);
323    mutex_unlock(&text_mutex);
324}
325
326/*
327 * Aggregate handlers for multiple kprobes support - these handlers
328 * take care of invoking the individual kprobe handlers on p->list
329 */
330static int __kprobes aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
331{
332    struct kprobe *kp;
333
334    list_for_each_entry_rcu(kp, &p->list, list) {
335        if (kp->pre_handler && likely(!kprobe_disabled(kp))) {
336            set_kprobe_instance(kp);
337            if (kp->pre_handler(kp, regs))
338                return 1;
339        }
340        reset_kprobe_instance();
341    }
342    return 0;
343}
344
345static void __kprobes aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
346                    unsigned long flags)
347{
348    struct kprobe *kp;
349
350    list_for_each_entry_rcu(kp, &p->list, list) {
351        if (kp->post_handler && likely(!kprobe_disabled(kp))) {
352            set_kprobe_instance(kp);
353            kp->post_handler(kp, regs, flags);
354            reset_kprobe_instance();
355        }
356    }
357}
358
359static int __kprobes aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
360                    int trapnr)
361{
362    struct kprobe *cur = __get_cpu_var(kprobe_instance);
363
364    /*
365     * if we faulted "during" the execution of a user specified
366     * probe handler, invoke just that probe's fault handler
367     */
368    if (cur && cur->fault_handler) {
369        if (cur->fault_handler(cur, regs, trapnr))
370            return 1;
371    }
372    return 0;
373}
374
375static int __kprobes aggr_break_handler(struct kprobe *p, struct pt_regs *regs)
376{
377    struct kprobe *cur = __get_cpu_var(kprobe_instance);
378    int ret = 0;
379
380    if (cur && cur->break_handler) {
381        if (cur->break_handler(cur, regs))
382            ret = 1;
383    }
384    reset_kprobe_instance();
385    return ret;
386}
387
388/* Walks the list and increments nmissed count for multiprobe case */
389void __kprobes kprobes_inc_nmissed_count(struct kprobe *p)
390{
391    struct kprobe *kp;
392    if (p->pre_handler != aggr_pre_handler) {
393        p->nmissed++;
394    } else {
395        list_for_each_entry_rcu(kp, &p->list, list)
396            kp->nmissed++;
397    }
398    return;
399}
400
401void __kprobes recycle_rp_inst(struct kretprobe_instance *ri,
402                struct hlist_head *head)
403{
404    struct kretprobe *rp = ri->rp;
405
406    /* remove rp inst off the rprobe_inst_table */
407    hlist_del(&ri->hlist);
408    INIT_HLIST_NODE(&ri->hlist);
409    if (likely(rp)) {
410        spin_lock(&rp->lock);
411        hlist_add_head(&ri->hlist, &rp->free_instances);
412        spin_unlock(&rp->lock);
413    } else
414        /* Unregistering */
415        hlist_add_head(&ri->hlist, head);
416}
417
418void __kprobes kretprobe_hash_lock(struct task_struct *tsk,
419             struct hlist_head **head, unsigned long *flags)
420{
421    unsigned long hash = hash_ptr(tsk, KPROBE_HASH_BITS);
422    spinlock_t *hlist_lock;
423
424    *head = &kretprobe_inst_table[hash];
425    hlist_lock = kretprobe_table_lock_ptr(hash);
426    spin_lock_irqsave(hlist_lock, *flags);
427}
428
429static void __kprobes kretprobe_table_lock(unsigned long hash,
430    unsigned long *flags)
431{
432    spinlock_t *hlist_lock = kretprobe_table_lock_ptr(hash);
433    spin_lock_irqsave(hlist_lock, *flags);
434}
435
436void __kprobes kretprobe_hash_unlock(struct task_struct *tsk,
437    unsigned long *flags)
438{
439    unsigned long hash = hash_ptr(tsk, KPROBE_HASH_BITS);
440    spinlock_t *hlist_lock;
441
442    hlist_lock = kretprobe_table_lock_ptr(hash);
443    spin_unlock_irqrestore(hlist_lock, *flags);
444}
445
446void __kprobes kretprobe_table_unlock(unsigned long hash, unsigned long *flags)
447{
448    spinlock_t *hlist_lock = kretprobe_table_lock_ptr(hash);
449    spin_unlock_irqrestore(hlist_lock, *flags);
450}
451
452/*
453 * This function is called from finish_task_switch when task tk becomes dead,
454 * so that we can recycle any function-return probe instances associated
455 * with this task. These left over instances represent probed functions
456 * that have been called but will never return.
457 */
458void __kprobes kprobe_flush_task(struct task_struct *tk)
459{
460    struct kretprobe_instance *ri;
461    struct hlist_head *head, empty_rp;
462    struct hlist_node *node, *tmp;
463    unsigned long hash, flags = 0;
464
465    if (unlikely(!kprobes_initialized))
466        /* Early boot. kretprobe_table_locks not yet initialized. */
467        return;
468
469    hash = hash_ptr(tk, KPROBE_HASH_BITS);
470    head = &kretprobe_inst_table[hash];
471    kretprobe_table_lock(hash, &flags);
472    hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
473        if (ri->task == tk)
474            recycle_rp_inst(ri, &empty_rp);
475    }
476    kretprobe_table_unlock(hash, &flags);
477    INIT_HLIST_HEAD(&empty_rp);
478    hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) {
479        hlist_del(&ri->hlist);
480        kfree(ri);
481    }
482}
483
484static inline void free_rp_inst(struct kretprobe *rp)
485{
486    struct kretprobe_instance *ri;
487    struct hlist_node *pos, *next;
488
489    hlist_for_each_entry_safe(ri, pos, next, &rp->free_instances, hlist) {
490        hlist_del(&ri->hlist);
491        kfree(ri);
492    }
493}
494
495static void __kprobes cleanup_rp_inst(struct kretprobe *rp)
496{
497    unsigned long flags, hash;
498    struct kretprobe_instance *ri;
499    struct hlist_node *pos, *next;
500    struct hlist_head *head;
501
502    /* No race here */
503    for (hash = 0; hash < KPROBE_TABLE_SIZE; hash++) {
504        kretprobe_table_lock(hash, &flags);
505        head = &kretprobe_inst_table[hash];
506        hlist_for_each_entry_safe(ri, pos, next, head, hlist) {
507            if (ri->rp == rp)
508                ri->rp = NULL;
509        }
510        kretprobe_table_unlock(hash, &flags);
511    }
512    free_rp_inst(rp);
513}
514
515/*
516 * Keep all fields in the kprobe consistent
517 */
518static inline void copy_kprobe(struct kprobe *old_p, struct kprobe *p)
519{
520    memcpy(&p->opcode, &old_p->opcode, sizeof(kprobe_opcode_t));
521    memcpy(&p->ainsn, &old_p->ainsn, sizeof(struct arch_specific_insn));
522}
523
524/*
525* Add the new probe to ap->list. Fail if this is the
526* second jprobe at the address - two jprobes can't coexist
527*/
528static int __kprobes add_new_kprobe(struct kprobe *ap, struct kprobe *p)
529{
530    BUG_ON(kprobe_gone(ap) || kprobe_gone(p));
531    if (p->break_handler) {
532        if (ap->break_handler)
533            return -EEXIST;
534        list_add_tail_rcu(&p->list, &ap->list);
535        ap->break_handler = aggr_break_handler;
536    } else
537        list_add_rcu(&p->list, &ap->list);
538    if (p->post_handler && !ap->post_handler)
539        ap->post_handler = aggr_post_handler;
540
541    if (kprobe_disabled(ap) && !kprobe_disabled(p)) {
542        ap->flags &= ~KPROBE_FLAG_DISABLED;
543        if (!kprobes_all_disarmed)
544            /* Arm the breakpoint again. */
545            arm_kprobe(ap);
546    }
547    return 0;
548}
549
550/*
551 * Fill in the required fields of the "manager kprobe". Replace the
552 * earlier kprobe in the hlist with the manager kprobe
553 */
554static inline void add_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
555{
556    copy_kprobe(p, ap);
557    flush_insn_slot(ap);
558    ap->addr = p->addr;
559    ap->flags = p->flags;
560    ap->pre_handler = aggr_pre_handler;
561    ap->fault_handler = aggr_fault_handler;
562    /* We don't care the kprobe which has gone. */
563    if (p->post_handler && !kprobe_gone(p))
564        ap->post_handler = aggr_post_handler;
565    if (p->break_handler && !kprobe_gone(p))
566        ap->break_handler = aggr_break_handler;
567
568    INIT_LIST_HEAD(&ap->list);
569    list_add_rcu(&p->list, &ap->list);
570
571    hlist_replace_rcu(&p->hlist, &ap->hlist);
572}
573
574/*
575 * This is the second or subsequent kprobe at the address - handle
576 * the intricacies
577 */
578static int __kprobes register_aggr_kprobe(struct kprobe *old_p,
579                      struct kprobe *p)
580{
581    int ret = 0;
582    struct kprobe *ap = old_p;
583
584    if (old_p->pre_handler != aggr_pre_handler) {
585        /* If old_p is not an aggr_probe, create new aggr_kprobe. */
586        ap = kzalloc(sizeof(struct kprobe), GFP_KERNEL);
587        if (!ap)
588            return -ENOMEM;
589        add_aggr_kprobe(ap, old_p);
590    }
591
592    if (kprobe_gone(ap)) {
593        /*
594         * Attempting to insert new probe at the same location that
595         * had a probe in the module vaddr area which already
596         * freed. So, the instruction slot has already been
597         * released. We need a new slot for the new probe.
598         */
599        ret = arch_prepare_kprobe(ap);
600        if (ret)
601            /*
602             * Even if fail to allocate new slot, don't need to
603             * free aggr_probe. It will be used next time, or
604             * freed by unregister_kprobe.
605             */
606            return ret;
607
608        /*
609         * Clear gone flag to prevent allocating new slot again, and
610         * set disabled flag because it is not armed yet.
611         */
612        ap->flags = (ap->flags & ~KPROBE_FLAG_GONE)
613                | KPROBE_FLAG_DISABLED;
614    }
615
616    copy_kprobe(ap, p);
617    return add_new_kprobe(ap, p);
618}
619
620/* Try to disable aggr_kprobe, and return 1 if succeeded.*/
621static int __kprobes try_to_disable_aggr_kprobe(struct kprobe *p)
622{
623    struct kprobe *kp;
624
625    list_for_each_entry_rcu(kp, &p->list, list) {
626        if (!kprobe_disabled(kp))
627            /*
628             * There is an active probe on the list.
629             * We can't disable aggr_kprobe.
630             */
631            return 0;
632    }
633    p->flags |= KPROBE_FLAG_DISABLED;
634    return 1;
635}
636
637static int __kprobes in_kprobes_functions(unsigned long addr)
638{
639    struct kprobe_blackpoint *kb;
640
641    if (addr >= (unsigned long)__kprobes_text_start &&
642        addr < (unsigned long)__kprobes_text_end)
643        return -EINVAL;
644    /*
645     * If there exists a kprobe_blacklist, verify and
646     * fail any probe registration in the prohibited area
647     */
648    for (kb = kprobe_blacklist; kb->name != NULL; kb++) {
649        if (kb->start_addr) {
650            if (addr >= kb->start_addr &&
651                addr < (kb->start_addr + kb->range))
652                return -EINVAL;
653        }
654    }
655    return 0;
656}
657
658/*
659 * If we have a symbol_name argument, look it up and add the offset field
660 * to it. This way, we can specify a relative address to a symbol.
661 */
662static kprobe_opcode_t __kprobes *kprobe_addr(struct kprobe *p)
663{
664    kprobe_opcode_t *addr = p->addr;
665    if (p->symbol_name) {
666        if (addr)
667            return NULL;
668        kprobe_lookup_name(p->symbol_name, addr);
669    }
670
671    if (!addr)
672        return NULL;
673    return (kprobe_opcode_t *)(((char *)addr) + p->offset);
674}
675
676int __kprobes register_kprobe(struct kprobe *p)
677{
678    int ret = 0;
679    struct kprobe *old_p;
680    struct module *probed_mod;
681    kprobe_opcode_t *addr;
682
683    addr = kprobe_addr(p);
684    if (!addr)
685        return -EINVAL;
686    p->addr = addr;
687
688    preempt_disable();
689    if (!kernel_text_address((unsigned long) p->addr) ||
690        in_kprobes_functions((unsigned long) p->addr)) {
691        preempt_enable();
692        return -EINVAL;
693    }
694
695    /* User can pass only KPROBE_FLAG_DISABLED to register_kprobe */
696    p->flags &= KPROBE_FLAG_DISABLED;
697
698    /*
699     * Check if are we probing a module.
700     */
701    probed_mod = __module_text_address((unsigned long) p->addr);
702    if (probed_mod) {
703        /*
704         * We must hold a refcount of the probed module while updating
705         * its code to prohibit unexpected unloading.
706         */
707        if (unlikely(!try_module_get(probed_mod))) {
708            preempt_enable();
709            return -EINVAL;
710        }
711        /*
712         * If the module freed .init.text, we couldn't insert
713         * kprobes in there.
714         */
715        if (within_module_init((unsigned long)p->addr, probed_mod) &&
716            probed_mod->state != MODULE_STATE_COMING) {
717            module_put(probed_mod);
718            preempt_enable();
719            return -EINVAL;
720        }
721    }
722    preempt_enable();
723
724    p->nmissed = 0;
725    INIT_LIST_HEAD(&p->list);
726    mutex_lock(&kprobe_mutex);
727    old_p = get_kprobe(p->addr);
728    if (old_p) {
729        ret = register_aggr_kprobe(old_p, p);
730        goto out;
731    }
732
733    mutex_lock(&text_mutex);
734    ret = arch_prepare_kprobe(p);
735    if (ret)
736        goto out_unlock_text;
737
738    INIT_HLIST_NODE(&p->hlist);
739    hlist_add_head_rcu(&p->hlist,
740               &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
741
742    if (!kprobes_all_disarmed && !kprobe_disabled(p))
743        arch_arm_kprobe(p);
744
745out_unlock_text:
746    mutex_unlock(&text_mutex);
747out:
748    mutex_unlock(&kprobe_mutex);
749
750    if (probed_mod)
751        module_put(probed_mod);
752
753    return ret;
754}
755EXPORT_SYMBOL_GPL(register_kprobe);
756
757/* Check passed kprobe is valid and return kprobe in kprobe_table. */
758static struct kprobe * __kprobes __get_valid_kprobe(struct kprobe *p)
759{
760    struct kprobe *old_p, *list_p;
761
762    old_p = get_kprobe(p->addr);
763    if (unlikely(!old_p))
764        return NULL;
765
766    if (p != old_p) {
767        list_for_each_entry_rcu(list_p, &old_p->list, list)
768            if (list_p == p)
769            /* kprobe p is a valid probe */
770                goto valid;
771        return NULL;
772    }
773valid:
774    return old_p;
775}
776
777/*
778 * Unregister a kprobe without a scheduler synchronization.
779 */
780static int __kprobes __unregister_kprobe_top(struct kprobe *p)
781{
782    struct kprobe *old_p, *list_p;
783
784    old_p = __get_valid_kprobe(p);
785    if (old_p == NULL)
786        return -EINVAL;
787
788    if (old_p == p ||
789        (old_p->pre_handler == aggr_pre_handler &&
790         list_is_singular(&old_p->list))) {
791        /*
792         * Only probe on the hash list. Disarm only if kprobes are
793         * enabled and not gone - otherwise, the breakpoint would
794         * already have been removed. We save on flushing icache.
795         */
796        if (!kprobes_all_disarmed && !kprobe_disabled(old_p))
797            disarm_kprobe(p);
798        hlist_del_rcu(&old_p->hlist);
799    } else {
800        if (p->break_handler && !kprobe_gone(p))
801            old_p->break_handler = NULL;
802        if (p->post_handler && !kprobe_gone(p)) {
803            list_for_each_entry_rcu(list_p, &old_p->list, list) {
804                if ((list_p != p) && (list_p->post_handler))
805                    goto noclean;
806            }
807            old_p->post_handler = NULL;
808        }
809noclean:
810        list_del_rcu(&p->list);
811        if (!kprobe_disabled(old_p)) {
812            try_to_disable_aggr_kprobe(old_p);
813            if (!kprobes_all_disarmed && kprobe_disabled(old_p))
814                disarm_kprobe(old_p);
815        }
816    }
817    return 0;
818}
819
820static void __kprobes __unregister_kprobe_bottom(struct kprobe *p)
821{
822    struct kprobe *old_p;
823
824    if (list_empty(&p->list))
825        arch_remove_kprobe(p);
826    else if (list_is_singular(&p->list)) {
827        /* "p" is the last child of an aggr_kprobe */
828        old_p = list_entry(p->list.next, struct kprobe, list);
829        list_del(&p->list);
830        arch_remove_kprobe(old_p);
831        kfree(old_p);
832    }
833}
834
835int __kprobes register_kprobes(struct kprobe **kps, int num)
836{
837    int i, ret = 0;
838
839    if (num <= 0)
840        return -EINVAL;
841    for (i = 0; i < num; i++) {
842        ret = register_kprobe(kps[i]);
843        if (ret < 0) {
844            if (i > 0)
845                unregister_kprobes(kps, i);
846            break;
847        }
848    }
849    return ret;
850}
851EXPORT_SYMBOL_GPL(register_kprobes);
852
853void __kprobes unregister_kprobe(struct kprobe *p)
854{
855    unregister_kprobes(&p, 1);
856}
857EXPORT_SYMBOL_GPL(unregister_kprobe);
858
859void __kprobes unregister_kprobes(struct kprobe **kps, int num)
860{
861    int i;
862
863    if (num <= 0)
864        return;
865    mutex_lock(&kprobe_mutex);
866    for (i = 0; i < num; i++)
867        if (__unregister_kprobe_top(kps[i]) < 0)
868            kps[i]->addr = NULL;
869    mutex_unlock(&kprobe_mutex);
870
871    synchronize_sched();
872    for (i = 0; i < num; i++)
873        if (kps[i]->addr)
874            __unregister_kprobe_bottom(kps[i]);
875}
876EXPORT_SYMBOL_GPL(unregister_kprobes);
877
878static struct notifier_block kprobe_exceptions_nb = {
879    .notifier_call = kprobe_exceptions_notify,
880    .priority = 0x7fffffff /* we need to be notified first */
881};
882
883unsigned long __weak arch_deref_entry_point(void *entry)
884{
885    return (unsigned long)entry;
886}
887
888int __kprobes register_jprobes(struct jprobe **jps, int num)
889{
890    struct jprobe *jp;
891    int ret = 0, i;
892
893    if (num <= 0)
894        return -EINVAL;
895    for (i = 0; i < num; i++) {
896        unsigned long addr;
897        jp = jps[i];
898        addr = arch_deref_entry_point(jp->entry);
899
900        if (!kernel_text_address(addr))
901            ret = -EINVAL;
902        else {
903            /* Todo: Verify probepoint is a function entry point */
904            jp->kp.pre_handler = setjmp_pre_handler;
905            jp->kp.break_handler = longjmp_break_handler;
906            ret = register_kprobe(&jp->kp);
907        }
908        if (ret < 0) {
909            if (i > 0)
910                unregister_jprobes(jps, i);
911            break;
912        }
913    }
914    return ret;
915}
916EXPORT_SYMBOL_GPL(register_jprobes);
917
918int __kprobes register_jprobe(struct jprobe *jp)
919{
920    return register_jprobes(&jp, 1);
921}
922EXPORT_SYMBOL_GPL(register_jprobe);
923
924void __kprobes unregister_jprobe(struct jprobe *jp)
925{
926    unregister_jprobes(&jp, 1);
927}
928EXPORT_SYMBOL_GPL(unregister_jprobe);
929
930void __kprobes unregister_jprobes(struct jprobe **jps, int num)
931{
932    int i;
933
934    if (num <= 0)
935        return;
936    mutex_lock(&kprobe_mutex);
937    for (i = 0; i < num; i++)
938        if (__unregister_kprobe_top(&jps[i]->kp) < 0)
939            jps[i]->kp.addr = NULL;
940    mutex_unlock(&kprobe_mutex);
941
942    synchronize_sched();
943    for (i = 0; i < num; i++) {
944        if (jps[i]->kp.addr)
945            __unregister_kprobe_bottom(&jps[i]->kp);
946    }
947}
948EXPORT_SYMBOL_GPL(unregister_jprobes);
949
950#ifdef CONFIG_KRETPROBES
951/*
952 * This kprobe pre_handler is registered with every kretprobe. When probe
953 * hits it will set up the return probe.
954 */
955static int __kprobes pre_handler_kretprobe(struct kprobe *p,
956                       struct pt_regs *regs)
957{
958    struct kretprobe *rp = container_of(p, struct kretprobe, kp);
959    unsigned long hash, flags = 0;
960    struct kretprobe_instance *ri;
961
962    /*TODO: consider to only swap the RA after the last pre_handler fired */
963    hash = hash_ptr(current, KPROBE_HASH_BITS);
964    spin_lock_irqsave(&rp->lock, flags);
965    if (!hlist_empty(&rp->free_instances)) {
966        ri = hlist_entry(rp->free_instances.first,
967                struct kretprobe_instance, hlist);
968        hlist_del(&ri->hlist);
969        spin_unlock_irqrestore(&rp->lock, flags);
970
971        ri->rp = rp;
972        ri->task = current;
973
974        if (rp->entry_handler && rp->entry_handler(ri, regs))
975            return 0;
976
977        arch_prepare_kretprobe(ri, regs);
978
979        /* XXX(hch): why is there no hlist_move_head? */
980        INIT_HLIST_NODE(&ri->hlist);
981        kretprobe_table_lock(hash, &flags);
982        hlist_add_head(&ri->hlist, &kretprobe_inst_table[hash]);
983        kretprobe_table_unlock(hash, &flags);
984    } else {
985        rp->nmissed++;
986        spin_unlock_irqrestore(&rp->lock, flags);
987    }
988    return 0;
989}
990
991int __kprobes register_kretprobe(struct kretprobe *rp)
992{
993    int ret = 0;
994    struct kretprobe_instance *inst;
995    int i;
996    void *addr;
997
998    if (kretprobe_blacklist_size) {
999        addr = kprobe_addr(&rp->kp);
1000        if (!addr)
1001            return -EINVAL;
1002
1003        for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
1004            if (kretprobe_blacklist[i].addr == addr)
1005                return -EINVAL;
1006        }
1007    }
1008
1009    rp->kp.pre_handler = pre_handler_kretprobe;
1010    rp->kp.post_handler = NULL;
1011    rp->kp.fault_handler = NULL;
1012    rp->kp.break_handler = NULL;
1013
1014    /* Pre-allocate memory for max kretprobe instances */
1015    if (rp->maxactive <= 0) {
1016#ifdef CONFIG_PREEMPT
1017        rp->maxactive = max(10, 2 * NR_CPUS);
1018#else
1019        rp->maxactive = NR_CPUS;
1020#endif
1021    }
1022    spin_lock_init(&rp->lock);
1023    INIT_HLIST_HEAD(&rp->free_instances);
1024    for (i = 0; i < rp->maxactive; i++) {
1025        inst = kmalloc(sizeof(struct kretprobe_instance) +
1026                   rp->data_size, GFP_KERNEL);
1027        if (inst == NULL) {
1028            free_rp_inst(rp);
1029            return -ENOMEM;
1030        }
1031        INIT_HLIST_NODE(&inst->hlist);
1032        hlist_add_head(&inst->hlist, &rp->free_instances);
1033    }
1034
1035    rp->nmissed = 0;
1036    /* Establish function entry probe point */
1037    ret = register_kprobe(&rp->kp);
1038    if (ret != 0)
1039        free_rp_inst(rp);
1040    return ret;
1041}
1042EXPORT_SYMBOL_GPL(register_kretprobe);
1043
1044int __kprobes register_kretprobes(struct kretprobe **rps, int num)
1045{
1046    int ret = 0, i;
1047
1048    if (num <= 0)
1049        return -EINVAL;
1050    for (i = 0; i < num; i++) {
1051        ret = register_kretprobe(rps[i]);
1052        if (ret < 0) {
1053            if (i > 0)
1054                unregister_kretprobes(rps, i);
1055            break;
1056        }
1057    }
1058    return ret;
1059}
1060EXPORT_SYMBOL_GPL(register_kretprobes);
1061
1062void __kprobes unregister_kretprobe(struct kretprobe *rp)
1063{
1064    unregister_kretprobes(&rp, 1);
1065}
1066EXPORT_SYMBOL_GPL(unregister_kretprobe);
1067
1068void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1069{
1070    int i;
1071
1072    if (num <= 0)
1073        return;
1074    mutex_lock(&kprobe_mutex);
1075    for (i = 0; i < num; i++)
1076        if (__unregister_kprobe_top(&rps[i]->kp) < 0)
1077            rps[i]->kp.addr = NULL;
1078    mutex_unlock(&kprobe_mutex);
1079
1080    synchronize_sched();
1081    for (i = 0; i < num; i++) {
1082        if (rps[i]->kp.addr) {
1083            __unregister_kprobe_bottom(&rps[i]->kp);
1084            cleanup_rp_inst(rps[i]);
1085        }
1086    }
1087}
1088EXPORT_SYMBOL_GPL(unregister_kretprobes);
1089
1090#else /* CONFIG_KRETPROBES */
1091int __kprobes register_kretprobe(struct kretprobe *rp)
1092{
1093    return -ENOSYS;
1094}
1095EXPORT_SYMBOL_GPL(register_kretprobe);
1096
1097int __kprobes register_kretprobes(struct kretprobe **rps, int num)
1098{
1099    return -ENOSYS;
1100}
1101EXPORT_SYMBOL_GPL(register_kretprobes);
1102
1103void __kprobes unregister_kretprobe(struct kretprobe *rp)
1104{
1105}
1106EXPORT_SYMBOL_GPL(unregister_kretprobe);
1107
1108void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1109{
1110}
1111EXPORT_SYMBOL_GPL(unregister_kretprobes);
1112
1113static int __kprobes pre_handler_kretprobe(struct kprobe *p,
1114                       struct pt_regs *regs)
1115{
1116    return 0;
1117}
1118
1119#endif /* CONFIG_KRETPROBES */
1120
1121/* Set the kprobe gone and remove its instruction buffer. */
1122static void __kprobes kill_kprobe(struct kprobe *p)
1123{
1124    struct kprobe *kp;
1125
1126    p->flags |= KPROBE_FLAG_GONE;
1127    if (p->pre_handler == aggr_pre_handler) {
1128        /*
1129         * If this is an aggr_kprobe, we have to list all the
1130         * chained probes and mark them GONE.
1131         */
1132        list_for_each_entry_rcu(kp, &p->list, list)
1133            kp->flags |= KPROBE_FLAG_GONE;
1134        p->post_handler = NULL;
1135        p->break_handler = NULL;
1136    }
1137    /*
1138     * Here, we can remove insn_slot safely, because no thread calls
1139     * the original probed function (which will be freed soon) any more.
1140     */
1141    arch_remove_kprobe(p);
1142}
1143
1144/* Module notifier call back, checking kprobes on the module */
1145static int __kprobes kprobes_module_callback(struct notifier_block *nb,
1146                         unsigned long val, void *data)
1147{
1148    struct module *mod = data;
1149    struct hlist_head *head;
1150    struct hlist_node *node;
1151    struct kprobe *p;
1152    unsigned int i;
1153    int checkcore = (val == MODULE_STATE_GOING);
1154
1155    if (val != MODULE_STATE_GOING && val != MODULE_STATE_LIVE)
1156        return NOTIFY_DONE;
1157
1158    /*
1159     * When MODULE_STATE_GOING was notified, both of module .text and
1160     * .init.text sections would be freed. When MODULE_STATE_LIVE was
1161     * notified, only .init.text section would be freed. We need to
1162     * disable kprobes which have been inserted in the sections.
1163     */
1164    mutex_lock(&kprobe_mutex);
1165    for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1166        head = &kprobe_table[i];
1167        hlist_for_each_entry_rcu(p, node, head, hlist)
1168            if (within_module_init((unsigned long)p->addr, mod) ||
1169                (checkcore &&
1170                 within_module_core((unsigned long)p->addr, mod))) {
1171                /*
1172                 * The vaddr this probe is installed will soon
1173                 * be vfreed buy not synced to disk. Hence,
1174                 * disarming the breakpoint isn't needed.
1175                 */
1176                kill_kprobe(p);
1177            }
1178    }
1179    mutex_unlock(&kprobe_mutex);
1180    return NOTIFY_DONE;
1181}
1182
1183static struct notifier_block kprobe_module_nb = {
1184    .notifier_call = kprobes_module_callback,
1185    .priority = 0
1186};
1187
1188static int __init init_kprobes(void)
1189{
1190    int i, err = 0;
1191    unsigned long offset = 0, size = 0;
1192    char *modname, namebuf[128];
1193    const char *symbol_name;
1194    void *addr;
1195    struct kprobe_blackpoint *kb;
1196
1197    /* FIXME allocate the probe table, currently defined statically */
1198    /* initialize all list heads */
1199    for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1200        INIT_HLIST_HEAD(&kprobe_table[i]);
1201        INIT_HLIST_HEAD(&kretprobe_inst_table[i]);
1202        spin_lock_init(&(kretprobe_table_locks[i].lock));
1203    }
1204
1205    /*
1206     * Lookup and populate the kprobe_blacklist.
1207     *
1208     * Unlike the kretprobe blacklist, we'll need to determine
1209     * the range of addresses that belong to the said functions,
1210     * since a kprobe need not necessarily be at the beginning
1211     * of a function.
1212     */
1213    for (kb = kprobe_blacklist; kb->name != NULL; kb++) {
1214        kprobe_lookup_name(kb->name, addr);
1215        if (!addr)
1216            continue;
1217
1218        kb->start_addr = (unsigned long)addr;
1219        symbol_name = kallsyms_lookup(kb->start_addr,
1220                &size, &offset, &modname, namebuf);
1221        if (!symbol_name)
1222            kb->range = 0;
1223        else
1224            kb->range = size;
1225    }
1226
1227    if (kretprobe_blacklist_size) {
1228        /* lookup the function address from its name */
1229        for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
1230            kprobe_lookup_name(kretprobe_blacklist[i].name,
1231                       kretprobe_blacklist[i].addr);
1232            if (!kretprobe_blacklist[i].addr)
1233                printk("kretprobe: lookup failed: %s\n",
1234                       kretprobe_blacklist[i].name);
1235        }
1236    }
1237
1238    /* By default, kprobes are armed */
1239    kprobes_all_disarmed = false;
1240
1241    err = arch_init_kprobes();
1242    if (!err)
1243        err = register_die_notifier(&kprobe_exceptions_nb);
1244    if (!err)
1245        err = register_module_notifier(&kprobe_module_nb);
1246
1247    kprobes_initialized = (err == 0);
1248
1249    if (!err)
1250        init_test_probes();
1251    return err;
1252}
1253
1254#ifdef CONFIG_DEBUG_FS
1255static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
1256        const char *sym, int offset,char *modname)
1257{
1258    char *kprobe_type;
1259
1260    if (p->pre_handler == pre_handler_kretprobe)
1261        kprobe_type = "r";
1262    else if (p->pre_handler == setjmp_pre_handler)
1263        kprobe_type = "j";
1264    else
1265        kprobe_type = "k";
1266    if (sym)
1267        seq_printf(pi, "%p %s %s+0x%x %s %s%s\n",
1268            p->addr, kprobe_type, sym, offset,
1269            (modname ? modname : " "),
1270            (kprobe_gone(p) ? "[GONE]" : ""),
1271            ((kprobe_disabled(p) && !kprobe_gone(p)) ?
1272             "[DISABLED]" : ""));
1273    else
1274        seq_printf(pi, "%p %s %p %s%s\n",
1275            p->addr, kprobe_type, p->addr,
1276            (kprobe_gone(p) ? "[GONE]" : ""),
1277            ((kprobe_disabled(p) && !kprobe_gone(p)) ?
1278             "[DISABLED]" : ""));
1279}
1280
1281static void __kprobes *kprobe_seq_start(struct seq_file *f, loff_t *pos)
1282{
1283    return (*pos < KPROBE_TABLE_SIZE) ? pos : NULL;
1284}
1285
1286static void __kprobes *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos)
1287{
1288    (*pos)++;
1289    if (*pos >= KPROBE_TABLE_SIZE)
1290        return NULL;
1291    return pos;
1292}
1293
1294static void __kprobes kprobe_seq_stop(struct seq_file *f, void *v)
1295{
1296    /* Nothing to do */
1297}
1298
1299static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v)
1300{
1301    struct hlist_head *head;
1302    struct hlist_node *node;
1303    struct kprobe *p, *kp;
1304    const char *sym = NULL;
1305    unsigned int i = *(loff_t *) v;
1306    unsigned long offset = 0;
1307    char *modname, namebuf[128];
1308
1309    head = &kprobe_table[i];
1310    preempt_disable();
1311    hlist_for_each_entry_rcu(p, node, head, hlist) {
1312        sym = kallsyms_lookup((unsigned long)p->addr, NULL,
1313                    &offset, &modname, namebuf);
1314        if (p->pre_handler == aggr_pre_handler) {
1315            list_for_each_entry_rcu(kp, &p->list, list)
1316                report_probe(pi, kp, sym, offset, modname);
1317        } else
1318            report_probe(pi, p, sym, offset, modname);
1319    }
1320    preempt_enable();
1321    return 0;
1322}
1323
1324static const struct seq_operations kprobes_seq_ops = {
1325    .start = kprobe_seq_start,
1326    .next = kprobe_seq_next,
1327    .stop = kprobe_seq_stop,
1328    .show = show_kprobe_addr
1329};
1330
1331static int __kprobes kprobes_open(struct inode *inode, struct file *filp)
1332{
1333    return seq_open(filp, &kprobes_seq_ops);
1334}
1335
1336static const struct file_operations debugfs_kprobes_operations = {
1337    .open = kprobes_open,
1338    .read = seq_read,
1339    .llseek = seq_lseek,
1340    .release = seq_release,
1341};
1342
1343/* Disable one kprobe */
1344int __kprobes disable_kprobe(struct kprobe *kp)
1345{
1346    int ret = 0;
1347    struct kprobe *p;
1348
1349    mutex_lock(&kprobe_mutex);
1350
1351    /* Check whether specified probe is valid. */
1352    p = __get_valid_kprobe(kp);
1353    if (unlikely(p == NULL)) {
1354        ret = -EINVAL;
1355        goto out;
1356    }
1357
1358    /* If the probe is already disabled (or gone), just return */
1359    if (kprobe_disabled(kp))
1360        goto out;
1361
1362    kp->flags |= KPROBE_FLAG_DISABLED;
1363    if (p != kp)
1364        /* When kp != p, p is always enabled. */
1365        try_to_disable_aggr_kprobe(p);
1366
1367    if (!kprobes_all_disarmed && kprobe_disabled(p))
1368        disarm_kprobe(p);
1369out:
1370    mutex_unlock(&kprobe_mutex);
1371    return ret;
1372}
1373EXPORT_SYMBOL_GPL(disable_kprobe);
1374
1375/* Enable one kprobe */
1376int __kprobes enable_kprobe(struct kprobe *kp)
1377{
1378    int ret = 0;
1379    struct kprobe *p;
1380
1381    mutex_lock(&kprobe_mutex);
1382
1383    /* Check whether specified probe is valid. */
1384    p = __get_valid_kprobe(kp);
1385    if (unlikely(p == NULL)) {
1386        ret = -EINVAL;
1387        goto out;
1388    }
1389
1390    if (kprobe_gone(kp)) {
1391        /* This kprobe has gone, we couldn't enable it. */
1392        ret = -EINVAL;
1393        goto out;
1394    }
1395
1396    if (!kprobes_all_disarmed && kprobe_disabled(p))
1397        arm_kprobe(p);
1398
1399    p->flags &= ~KPROBE_FLAG_DISABLED;
1400    if (p != kp)
1401        kp->flags &= ~KPROBE_FLAG_DISABLED;
1402out:
1403    mutex_unlock(&kprobe_mutex);
1404    return ret;
1405}
1406EXPORT_SYMBOL_GPL(enable_kprobe);
1407
1408static void __kprobes arm_all_kprobes(void)
1409{
1410    struct hlist_head *head;
1411    struct hlist_node *node;
1412    struct kprobe *p;
1413    unsigned int i;
1414
1415    mutex_lock(&kprobe_mutex);
1416
1417    /* If kprobes are armed, just return */
1418    if (!kprobes_all_disarmed)
1419        goto already_enabled;
1420
1421    mutex_lock(&text_mutex);
1422    for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1423        head = &kprobe_table[i];
1424        hlist_for_each_entry_rcu(p, node, head, hlist)
1425            if (!kprobe_disabled(p))
1426                arch_arm_kprobe(p);
1427    }
1428    mutex_unlock(&text_mutex);
1429
1430    kprobes_all_disarmed = false;
1431    printk(KERN_INFO "Kprobes globally enabled\n");
1432
1433already_enabled:
1434    mutex_unlock(&kprobe_mutex);
1435    return;
1436}
1437
1438static void __kprobes disarm_all_kprobes(void)
1439{
1440    struct hlist_head *head;
1441    struct hlist_node *node;
1442    struct kprobe *p;
1443    unsigned int i;
1444
1445    mutex_lock(&kprobe_mutex);
1446
1447    /* If kprobes are already disarmed, just return */
1448    if (kprobes_all_disarmed)
1449        goto already_disabled;
1450
1451    kprobes_all_disarmed = true;
1452    printk(KERN_INFO "Kprobes globally disabled\n");
1453    mutex_lock(&text_mutex);
1454    for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1455        head = &kprobe_table[i];
1456        hlist_for_each_entry_rcu(p, node, head, hlist) {
1457            if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p))
1458                arch_disarm_kprobe(p);
1459        }
1460    }
1461
1462    mutex_unlock(&text_mutex);
1463    mutex_unlock(&kprobe_mutex);
1464    /* Allow all currently running kprobes to complete */
1465    synchronize_sched();
1466    return;
1467
1468already_disabled:
1469    mutex_unlock(&kprobe_mutex);
1470    return;
1471}
1472
1473/*
1474 * XXX: The debugfs bool file interface doesn't allow for callbacks
1475 * when the bool state is switched. We can reuse that facility when
1476 * available
1477 */
1478static ssize_t read_enabled_file_bool(struct file *file,
1479           char __user *user_buf, size_t count, loff_t *ppos)
1480{
1481    char buf[3];
1482
1483    if (!kprobes_all_disarmed)
1484        buf[0] = '1';
1485    else
1486        buf[0] = '0';
1487    buf[1] = '\n';
1488    buf[2] = 0x00;
1489    return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
1490}
1491
1492static ssize_t write_enabled_file_bool(struct file *file,
1493           const char __user *user_buf, size_t count, loff_t *ppos)
1494{
1495    char buf[32];
1496    int buf_size;
1497
1498    buf_size = min(count, (sizeof(buf)-1));
1499    if (copy_from_user(buf, user_buf, buf_size))
1500        return -EFAULT;
1501
1502    switch (buf[0]) {
1503    case 'y':
1504    case 'Y':
1505    case '1':
1506        arm_all_kprobes();
1507        break;
1508    case 'n':
1509    case 'N':
1510    case '0':
1511        disarm_all_kprobes();
1512        break;
1513    }
1514
1515    return count;
1516}
1517
1518static const struct file_operations fops_kp = {
1519    .read = read_enabled_file_bool,
1520    .write = write_enabled_file_bool,
1521};
1522
1523static int __kprobes debugfs_kprobe_init(void)
1524{
1525    struct dentry *dir, *file;
1526    unsigned int value = 1;
1527
1528    dir = debugfs_create_dir("kprobes", NULL);
1529    if (!dir)
1530        return -ENOMEM;
1531
1532    file = debugfs_create_file("list", 0444, dir, NULL,
1533                &debugfs_kprobes_operations);
1534    if (!file) {
1535        debugfs_remove(dir);
1536        return -ENOMEM;
1537    }
1538
1539    file = debugfs_create_file("enabled", 0600, dir,
1540                    &value, &fops_kp);
1541    if (!file) {
1542        debugfs_remove(dir);
1543        return -ENOMEM;
1544    }
1545
1546    return 0;
1547}
1548
1549late_initcall(debugfs_kprobe_init);
1550#endif /* CONFIG_DEBUG_FS */
1551
1552module_init(init_kprobes);
1553
1554/* defined in arch/.../kernel/kprobes.c */
1555EXPORT_SYMBOL_GPL(jprobe_return);
1556

Archive Download this file



interactive