History

Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull more perf updates from Ingo Molnar: "A second round of perf updates: - wide reaching kprobes sanitization and robustization, with the hope of fixing all 'probe this function crashes the kernel' bugs, by Masami Hiramatsu. - uprobes updates from Oleg Nesterov: tmpfs support, corner case fixes and robustization work. - perf tooling updates and fixes from Jiri Olsa, Namhyung Ki, Arnaldo et al: * Add support to accumulate hist periods (Namhyung Kim) * various fixes, refactorings and enhancements" * 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (101 commits) perf: Differentiate exec() and non-exec() comm events perf: Fix perf_event_comm() vs. exec() assumption uprobes/x86: Rename arch_uprobe->def to ->defparam, minor comment updates perf/documentation: Add description for conditional branch filter perf/x86: Add conditional branch filtering support perf/tool: Add conditional branch filter 'cond' to perf record perf: Add new conditional branch filter 'PERF_SAMPLE_BRANCH_COND' uprobes: Teach copy_insn() to support tmpfs uprobes: Shift ->readpage check from __copy_insn() to uprobe_register() perf/x86: Use common PMU interrupt disabled code perf/ARM: Use common PMU interrupt disabled code perf: Disable sampled events if no PMU interrupt perf: Fix use after free in perf_remove_from_context() perf tools: Fix 'make help' message error perf record: Fix poll return value propagation perf tools: Move elide bool into perf_hpp_fmt struct perf tools: Remove elide setup for SORT_MODE__MEMORY mode perf tools: Fix "==" into "=" in ui_browser__warning assignment perf tools: Allow overriding sysfs and proc finding with env var perf tools: Consider header files outside perf directory in tags target ...

Linus Torvalds committed 12 years ago

Commit 3737a122 parents c29deef 82b897781 files · +2979 −1182Browse files

Showing the changes to kernel (10 of 81 files). Show all

Unified · Split

10 files
  1. kernel/events/core.c +27 −16
  2. kernel/events/uprobes.c +33 −19
  3. kernel/kprobes.c +229 −163
  4. kernel/notifier.c +13 −9
  5. kernel/sched/core.c +5 −2
  6. kernel/trace/trace_event_perf.c +3 −2
  7. kernel/trace/trace_kprobe.c +41 −30
  8. kernel/trace/trace_probe.c +35 −30
  9. kernel/trace/trace_probe.h +7 −8
  10. kernel/trace/trace_uprobe.c +35 −31
kernel/events/core.c+27−16
@@ -2974,6 +2974,22 @@ out: · 2973 unmodified lines
29742974 local_irq_restore(flags);
29752975 }
29762976
2977+void perf_event_exec(void)
2978+{
2979+ struct perf_event_context *ctx;
2980+ int ctxn;
2981+
2982+ rcu_read_lock();
2983+ for_each_task_context_nr(ctxn) {
2984+ ctx = current->perf_event_ctxp[ctxn];
2985+ if (!ctx)
2986+ continue;
2987+
2988+ perf_event_enable_on_exec(ctx);
2989+ }
2990+ rcu_read_unlock();
2991+}
2992+
29772993 /*
29782994 * Cross CPU call to read the hardware event
29792995 */
@@ -5075,21 +5091,9 @@ static void perf_event_comm_event(struct perf_comm_event *comm_event) · 2095 unmodified lines
50755091 NULL);
50765092 }
50775093
5078−void perf_event_comm(struct task_struct *task)
5094+void perf_event_comm(struct task_struct *task, bool exec)
50795095 {
50805096 struct perf_comm_event comm_event;
5081− struct perf_event_context *ctx;
5082− int ctxn;
5083−
5084− rcu_read_lock();
5085− for_each_task_context_nr(ctxn) {
5086− ctx = task->perf_event_ctxp[ctxn];
5087− if (!ctx)
5088− continue;
5089−
5090− perf_event_enable_on_exec(ctx);
5091− }
5092− rcu_read_unlock();
50935097
50945098 if (!atomic_read(&nr_comm_events))
50955099 return;
@@ -5101,7 +5105,7 @@ void perf_event_comm(struct task_struct *task) · 5 unmodified lines
51015105 .event_id = {
51025106 .header = {
51035107 .type = PERF_RECORD_COMM,
5104− .misc = 0,
5108+ .misc = exec ? PERF_RECORD_MISC_COMM_EXEC : 0,
51055109 /* .size */
51065110 },
51075111 /* .pid */
@@ -7122,6 +7126,13 @@ SYSCALL_DEFINE5(perf_event_open, · 2014 unmodified lines
71227126 }
71237127 }
71247128
7129+ if (is_sampling_event(event)) {
7130+ if (event->pmu->capabilities & PERF_PMU_CAP_NO_INTERRUPT) {
7131+ err = -ENOTSUPP;
7132+ goto err_alloc;
7133+ }
7134+ }
7135+
71257136 account_event(event);
71267137
71277138 /*
@@ -7433,7 +7444,7 @@ __perf_event_exit_task(struct perf_event *child_event, · 305 unmodified lines
74337444
74347445 static void perf_event_exit_task_context(struct task_struct *child, int ctxn)
74357446 {
7436− struct perf_event *child_event;
7447+ struct perf_event *child_event, *next;
74377448 struct perf_event_context *child_ctx;
74387449 unsigned long flags;
74397450
@@ -7487,7 +7498,7 @@ static void perf_event_exit_task_context(struct task_struct *child, int ctxn) · 47 unmodified lines
74877498 */
74887499 mutex_lock(&child_ctx->mutex);
74897500
7490− list_for_each_entry_rcu(child_event, &child_ctx->event_list, event_entry)
7501+ list_for_each_entry_safe(child_event, next, &child_ctx->event_list, event_entry)
74917502 __perf_event_exit_task(child_event, child_ctx, child);
74927503
74937504 mutex_unlock(&child_ctx->mutex);
kernel/events/uprobes.c+33−19
@@ -36,6 +36,7 @@ · 35 unmodified lines
3636 #include "../../mm/internal.h" /* munlock_vma_page */
3737 #include <linux/percpu-rwsem.h>
3838 #include <linux/task_work.h>
39+#include <linux/shmem_fs.h>
3940
4041 #include <linux/uprobes.h>
4142
@@ -127,7 +128,7 @@ struct xol_area { · 85 unmodified lines
127128 */
128129 static bool valid_vma(struct vm_area_struct *vma, bool is_register)
129130 {
130− vm_flags_t flags = VM_HUGETLB | VM_MAYEXEC | VM_SHARED;
131+ vm_flags_t flags = VM_HUGETLB | VM_MAYEXEC | VM_MAYSHARE;
131132
132133 if (is_register)
133134 flags |= VM_WRITE;
@@ -279,18 +280,13 @@ static int verify_opcode(struct page *page, unsigned long vaddr, uprobe_opcode_t · 145 unmodified lines
279280 * supported by that architecture then we need to modify is_trap_at_addr and
280281 * uprobe_write_opcode accordingly. This would never be a problem for archs
281282 * that have fixed length instructions.
282− */
283−
284−/*
283+ *
285284 * uprobe_write_opcode - write the opcode at a given virtual address.
286285 * @mm: the probed process address space.
287286 * @vaddr: the virtual address to store the opcode.
288287 * @opcode: opcode to be written at @vaddr.
289288 *
290− * Called with mm->mmap_sem held (for read and with a reference to
291− * mm).
292− *
293− * For mm @mm, write the opcode at @vaddr.
289+ * Called with mm->mmap_sem held for write.
294290 * Return 0 (success) or a negative errno.
295291 */
296292 int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr,
@@ -310,21 +306,25 @@ retry: · 13 unmodified lines
310306 if (ret <= 0)
311307 goto put_old;
312308
309+ ret = anon_vma_prepare(vma);
310+ if (ret)
311+ goto put_old;
312+
313313 ret = -ENOMEM;
314314 new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, vaddr);
315315 if (!new_page)
316316 goto put_old;
317317
318− __SetPageUptodate(new_page);
318+ if (mem_cgroup_charge_anon(new_page, mm, GFP_KERNEL))
319+ goto put_new;
319320
321+ __SetPageUptodate(new_page);
320322 copy_highpage(new_page, old_page);
321323 copy_to_page(new_page, vaddr, &opcode, UPROBE_SWBP_INSN_SIZE);
322324
323− ret = anon_vma_prepare(vma);
324− if (ret)
325− goto put_new;
326−
327325 ret = __replace_page(vma, vaddr, old_page, new_page);
326+ if (ret)
327+ mem_cgroup_uncharge_page(new_page);
328328
329329 put_new:
330330 page_cache_release(new_page);
@@ -537,14 +537,15 @@ static int __copy_insn(struct address_space *mapping, struct file *filp, · 206 unmodified lines
537537 void *insn, int nbytes, loff_t offset)
538538 {
539539 struct page *page;
540−
541− if (!mapping->a_ops->readpage)
542− return -EIO;
543540 /*
544− * Ensure that the page that has the original instruction is
545− * populated and in page-cache.
541+ * Ensure that the page that has the original instruction is populated
542+ * and in page-cache. If ->readpage == NULL it must be shmem_mapping(),
543+ * see uprobe_register().
546544 */
547− page = read_mapping_page(mapping, offset >> PAGE_CACHE_SHIFT, filp);
545+ if (mapping->a_ops->readpage)
546+ page = read_mapping_page(mapping, offset >> PAGE_CACHE_SHIFT, filp);
547+ else
548+ page = shmem_read_mapping_page(mapping, offset >> PAGE_CACHE_SHIFT);
548549 if (IS_ERR(page))
549550 return PTR_ERR(page);
550551
@@ -880,6 +881,9 @@ int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer * · 329 unmodified lines
880881 if (!uc->handler && !uc->ret_handler)
881882 return -EINVAL;
882883
884+ /* copy_insn() uses read_mapping_page() or shmem_read_mapping_page() */
885+ if (!inode->i_mapping->a_ops->readpage && !shmem_mapping(inode->i_mapping))
886+ return -EIO;
883887 /* Racy, just to catch the obvious mistakes */
884888 if (offset > i_size_read(inode))
885889 return -EINVAL;
@@ -1361,6 +1365,16 @@ unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs) · 475 unmodified lines
13611365 return instruction_pointer(regs) - UPROBE_SWBP_INSN_SIZE;
13621366 }
13631367
1368+unsigned long uprobe_get_trap_addr(struct pt_regs *regs)
1369+{
1370+ struct uprobe_task *utask = current->utask;
1371+
1372+ if (unlikely(utask && utask->active_uprobe))
1373+ return utask->vaddr;
1374+
1375+ return instruction_pointer(regs);
1376+}
1377+
13641378 /*
13651379 * Called with no locks held.
13661380 * Called in context of a exiting or a exec-ing thread.
kernel/kprobes.c+229−163
@@ -86,21 +86,8 @@ static raw_spinlock_t *kretprobe_table_lock_ptr(unsigned long hash) · 85 unmodified lines
8686 return &(kretprobe_table_locks[hash].lock);
8787 }
8888
89−/*
90− * Normally, functions that we'd want to prohibit kprobes in, are marked
91− * __kprobes. But, there are cases where such functions already belong to
92− * a different section (__sched for preempt_schedule)
93− *
94− * For such cases, we now have a blacklist
95− */
96−static struct kprobe_blackpoint kprobe_blacklist[] = {
97− {"preempt_schedule",},
98− {"native_get_debugreg",},
99− {"irq_entries_start",},
100− {"common_interrupt",},
101− {"mcount",}, /* mcount can be called from everywhere */
102− {NULL} /* Terminator */
103−};
89+/* Blacklist -- list of struct kprobe_blacklist_entry */
90+static LIST_HEAD(kprobe_blacklist);
10491
10592 #ifdef __ARCH_WANT_KPROBES_INSN_SLOT
10693 /*
@@ -151,13 +138,13 @@ struct kprobe_insn_cache kprobe_insn_slots = { · 44 unmodified lines
151138 .insn_size = MAX_INSN_SIZE,
152139 .nr_garbage = 0,
153140 };
154−static int __kprobes collect_garbage_slots(struct kprobe_insn_cache *c);
141+static int collect_garbage_slots(struct kprobe_insn_cache *c);
155142
156143 /**
157144 * __get_insn_slot() - Find a slot on an executable page for an instruction.
158145 * We allocate an executable page if there's no room on existing ones.
159146 */
160−kprobe_opcode_t __kprobes *__get_insn_slot(struct kprobe_insn_cache *c)
147+kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c)
161148 {
162149 struct kprobe_insn_page *kip;
163150 kprobe_opcode_t *slot = NULL;
@@ -214,7 +201,7 @@ out: · 50 unmodified lines
214201 }
215202
216203 /* Return 1 if all garbages are collected, otherwise 0. */
217−static int __kprobes collect_one_slot(struct kprobe_insn_page *kip, int idx)
204+static int collect_one_slot(struct kprobe_insn_page *kip, int idx)
218205 {
219206 kip->slot_used[idx] = SLOT_CLEAN;
220207 kip->nused--;
@@ -235,7 +222,7 @@ static int __kprobes collect_one_slot(struct kprobe_insn_page *kip, int idx) · 14 unmodified lines
235222 return 0;
236223 }
237224
238−static int __kprobes collect_garbage_slots(struct kprobe_insn_cache *c)
225+static int collect_garbage_slots(struct kprobe_insn_cache *c)
239226 {
240227 struct kprobe_insn_page *kip, *next;
241228
@@ -257,8 +244,8 @@ static int __kprobes collect_garbage_slots(struct kprobe_insn_cache *c) · 15 unmodified lines
257244 return 0;
258245 }
259246
260−void __kprobes __free_insn_slot(struct kprobe_insn_cache *c,
261− kprobe_opcode_t *slot, int dirty)
247+void __free_insn_slot(struct kprobe_insn_cache *c,
248+ kprobe_opcode_t *slot, int dirty)
262249 {
263250 struct kprobe_insn_page *kip;
264251
@@ -314,7 +301,7 @@ static inline void reset_kprobe_instance(void) · 49 unmodified lines
314301 * OR
315302 * - with preemption disabled - from arch/xxx/kernel/kprobes.c
316303 */
317−struct kprobe __kprobes *get_kprobe(void *addr)
304+struct kprobe *get_kprobe(void *addr)
318305 {
319306 struct hlist_head *head;
320307 struct kprobe *p;
@@ -327,8 +314,9 @@ struct kprobe __kprobes *get_kprobe(void *addr) · 6 unmodified lines
327314
328315 return NULL;
329316 }
317+NOKPROBE_SYMBOL(get_kprobe);
330318
331−static int __kprobes aggr_pre_handler(struct kprobe *p, struct pt_regs *regs);
319+static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs);
332320
333321 /* Return true if the kprobe is an aggregator */
334322 static inline int kprobe_aggrprobe(struct kprobe *p)
@@ -360,7 +348,7 @@ static bool kprobes_allow_optimization; · 25 unmodified lines
360348 * Call all pre_handler on the list, but ignores its return value.
361349 * This must be called from arch-dep optimized caller.
362350 */
363−void __kprobes opt_pre_handler(struct kprobe *p, struct pt_regs *regs)
351+void opt_pre_handler(struct kprobe *p, struct pt_regs *regs)
364352 {
365353 struct kprobe *kp;
366354
@@ -372,9 +360,10 @@ void __kprobes opt_pre_handler(struct kprobe *p, struct pt_regs *regs) · 5 unmodified lines
372360 reset_kprobe_instance();
373361 }
374362 }
363+NOKPROBE_SYMBOL(opt_pre_handler);
375364
376365 /* Free optimized instructions and optimized_kprobe */
377−static __kprobes void free_aggr_kprobe(struct kprobe *p)
366+static void free_aggr_kprobe(struct kprobe *p)
378367 {
379368 struct optimized_kprobe *op;
380369
@@ -412,7 +401,7 @@ static inline int kprobe_disarmed(struct kprobe *p) · 31 unmodified lines
412401 }
413402
414403 /* Return true(!0) if the probe is queued on (un)optimizing lists */
415−static int __kprobes kprobe_queued(struct kprobe *p)
404+static int kprobe_queued(struct kprobe *p)
416405 {
417406 struct optimized_kprobe *op;
418407
@@ -428,7 +417,7 @@ static int __kprobes kprobe_queued(struct kprobe *p) · 9 unmodified lines
428417 * Return an optimized kprobe whose optimizing code replaces
429418 * instructions including addr (exclude breakpoint).
430419 */
431−static struct kprobe *__kprobes get_optimized_kprobe(unsigned long addr)
420+static struct kprobe *get_optimized_kprobe(unsigned long addr)
432421 {
433422 int i;
434423 struct kprobe *p = NULL;
@@ -460,7 +449,7 @@ static DECLARE_DELAYED_WORK(optimizing_work, kprobe_optimizer); · 25 unmodified lines
460449 * Optimize (replace a breakpoint with a jump) kprobes listed on
461450 * optimizing_list.
462451 */
463−static __kprobes void do_optimize_kprobes(void)
452+static void do_optimize_kprobes(void)
464453 {
465454 /* Optimization never be done when disarmed */
466455 if (kprobes_all_disarmed || !kprobes_allow_optimization ||
@@ -488,7 +477,7 @@ static __kprobes void do_optimize_kprobes(void) · 21 unmodified lines
488477 * Unoptimize (replace a jump with a breakpoint and remove the breakpoint
489478 * if need) kprobes listed on unoptimizing_list.
490479 */
491−static __kprobes void do_unoptimize_kprobes(void)
480+static void do_unoptimize_kprobes(void)
492481 {
493482 struct optimized_kprobe *op, *tmp;
494483
@@ -520,7 +509,7 @@ static __kprobes void do_unoptimize_kprobes(void) · 25 unmodified lines
520509 }
521510
522511 /* Reclaim all kprobes on the free_list */
523−static __kprobes void do_free_cleaned_kprobes(void)
512+static void do_free_cleaned_kprobes(void)
524513 {
525514 struct optimized_kprobe *op, *tmp;
526515
@@ -532,13 +521,13 @@ static __kprobes void do_free_cleaned_kprobes(void) · 5 unmodified lines
532521 }
533522
534523 /* Start optimizer after OPTIMIZE_DELAY passed */
535−static __kprobes void kick_kprobe_optimizer(void)
524+static void kick_kprobe_optimizer(void)
536525 {
537526 schedule_delayed_work(&optimizing_work, OPTIMIZE_DELAY);
538527 }
539528
540529 /* Kprobe jump optimizer */
541−static __kprobes void kprobe_optimizer(struct work_struct *work)
530+static void kprobe_optimizer(struct work_struct *work)
542531 {
543532 mutex_lock(&kprobe_mutex);
544533 /* Lock modules while optimizing kprobes */
@@ -574,7 +563,7 @@ static __kprobes void kprobe_optimizer(struct work_struct *work) · 29 unmodified lines
574563 }
575564
576565 /* Wait for completing optimization and unoptimization */
577−static __kprobes void wait_for_kprobe_optimizer(void)
566+static void wait_for_kprobe_optimizer(void)
578567 {
579568 mutex_lock(&kprobe_mutex);
580569
@@ -593,7 +582,7 @@ static __kprobes void wait_for_kprobe_optimizer(void) · 12 unmodified lines
593582 }
594583
595584 /* Optimize kprobe if p is ready to be optimized */
596−static __kprobes void optimize_kprobe(struct kprobe *p)
585+static void optimize_kprobe(struct kprobe *p)
597586 {
598587 struct optimized_kprobe *op;
599588
@@ -627,7 +616,7 @@ static __kprobes void optimize_kprobe(struct kprobe *p) · 27 unmodified lines
627616 }
628617
629618 /* Short cut to direct unoptimizing */
630−static __kprobes void force_unoptimize_kprobe(struct optimized_kprobe *op)
619+static void force_unoptimize_kprobe(struct optimized_kprobe *op)
631620 {
632621 get_online_cpus();
633622 arch_unoptimize_kprobe(op);
@@ -637,7 +626,7 @@ static __kprobes void force_unoptimize_kprobe(struct optimized_kprobe *op) · 3 unmodified lines
637626 }
638627
639628 /* Unoptimize a kprobe if p is optimized */
640−static __kprobes void unoptimize_kprobe(struct kprobe *p, bool force)
629+static void unoptimize_kprobe(struct kprobe *p, bool force)
641630 {
642631 struct optimized_kprobe *op;
643632
@@ -697,7 +686,7 @@ static void reuse_unused_kprobe(struct kprobe *ap) · 53 unmodified lines
697686 }
698687
699688 /* Remove optimized instructions */
700−static void __kprobes kill_optimized_kprobe(struct kprobe *p)
689+static void kill_optimized_kprobe(struct kprobe *p)
701690 {
702691 struct optimized_kprobe *op;
703692
@@ -723,7 +712,7 @@ static void __kprobes kill_optimized_kprobe(struct kprobe *p) · 19 unmodified lines
723712 }
724713
725714 /* Try to prepare optimized instructions */
726−static __kprobes void prepare_optimized_kprobe(struct kprobe *p)
715+static void prepare_optimized_kprobe(struct kprobe *p)
727716 {
728717 struct optimized_kprobe *op;
729718
@@ -732,7 +721,7 @@ static __kprobes void prepare_optimized_kprobe(struct kprobe *p) · 2 unmodified lines
732721 }
733722
734723 /* Allocate new optimized_kprobe and try to prepare optimized instructions */
735−static __kprobes struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
724+static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
736725 {
737726 struct optimized_kprobe *op;
738727
@@ -747,13 +736,13 @@ static __kprobes struct kprobe *alloc_aggr_kprobe(struct kprobe *p) · 8 unmodified lines
747736 return &op->kp;
748737 }
749738
750−static void __kprobes init_aggr_kprobe(struct kprobe *ap, struct kprobe *p);
739+static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p);
751740
752741 /*
753742 * Prepare an optimized_kprobe and optimize it
754743 * NOTE: p must be a normal registered kprobe
755744 */
756−static __kprobes void try_to_optimize_kprobe(struct kprobe *p)
745+static void try_to_optimize_kprobe(struct kprobe *p)
757746 {
758747 struct kprobe *ap;
759748 struct optimized_kprobe *op;
@@ -787,7 +776,7 @@ out: · 27 unmodified lines
787776 }
788777
789778 #ifdef CONFIG_SYSCTL
790−static void __kprobes optimize_all_kprobes(void)
779+static void optimize_all_kprobes(void)
791780 {
792781 struct hlist_head *head;
793782 struct kprobe *p;
@@ -810,7 +799,7 @@ out: · 16 unmodified lines
810799 mutex_unlock(&kprobe_mutex);
811800 }
812801
813−static void __kprobes unoptimize_all_kprobes(void)
802+static void unoptimize_all_kprobes(void)
814803 {
815804 struct hlist_head *head;
816805 struct kprobe *p;
@@ -861,7 +850,7 @@ int proc_kprobes_optimization_handler(struct ctl_table *table, int write, · 44 unmodified lines
861850 #endif /* CONFIG_SYSCTL */
862851
863852 /* Put a breakpoint for a probe. Must be called with text_mutex locked */
864−static void __kprobes __arm_kprobe(struct kprobe *p)
853+static void __arm_kprobe(struct kprobe *p)
865854 {
866855 struct kprobe *_p;
867856
@@ -876,7 +865,7 @@ static void __kprobes __arm_kprobe(struct kprobe *p) · 8 unmodified lines
876865 }
877866
878867 /* Remove the breakpoint of a probe. Must be called with text_mutex locked */
879−static void __kprobes __disarm_kprobe(struct kprobe *p, bool reopt)
868+static void __disarm_kprobe(struct kprobe *p, bool reopt)
880869 {
881870 struct kprobe *_p;
882871
@@ -911,13 +900,13 @@ static void reuse_unused_kprobe(struct kprobe *ap) · 28 unmodified lines
911900 BUG_ON(kprobe_unused(ap));
912901 }
913902
914−static __kprobes void free_aggr_kprobe(struct kprobe *p)
903+static void free_aggr_kprobe(struct kprobe *p)
915904 {
916905 arch_remove_kprobe(p);
917906 kfree(p);
918907 }
919908
920−static __kprobes struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
909+static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
921910 {
922911 return kzalloc(sizeof(struct kprobe), GFP_KERNEL);
923912 }
@@ -931,7 +920,7 @@ static struct ftrace_ops kprobe_ftrace_ops __read_mostly = { · 7 unmodified lines
931920 static int kprobe_ftrace_enabled;
932921
933922 /* Must ensure p->addr is really on ftrace */
934−static int __kprobes prepare_kprobe(struct kprobe *p)
923+static int prepare_kprobe(struct kprobe *p)
935924 {
936925 if (!kprobe_ftrace(p))
937926 return arch_prepare_kprobe(p);
@@ -940,7 +929,7 @@ static int __kprobes prepare_kprobe(struct kprobe *p) · 2 unmodified lines
940929 }
941930
942931 /* Caller must lock kprobe_mutex */
943−static void __kprobes arm_kprobe_ftrace(struct kprobe *p)
932+static void arm_kprobe_ftrace(struct kprobe *p)
944933 {
945934 int ret;
946935
@@ -955,7 +944,7 @@ static void __kprobes arm_kprobe_ftrace(struct kprobe *p) · 8 unmodified lines
955944 }
956945
957946 /* Caller must lock kprobe_mutex */
958−static void __kprobes disarm_kprobe_ftrace(struct kprobe *p)
947+static void disarm_kprobe_ftrace(struct kprobe *p)
959948 {
960949 int ret;
961950
@@ -975,7 +964,7 @@ static void __kprobes disarm_kprobe_ftrace(struct kprobe *p) · 13 unmodified lines
975964 #endif
976965
977966 /* Arm a kprobe with text_mutex */
978−static void __kprobes arm_kprobe(struct kprobe *kp)
967+static void arm_kprobe(struct kprobe *kp)
979968 {
980969 if (unlikely(kprobe_ftrace(kp))) {
981970 arm_kprobe_ftrace(kp);
@@ -992,7 +981,7 @@ static void __kprobes arm_kprobe(struct kprobe *kp) · 10 unmodified lines
992981 }
993982
994983 /* Disarm a kprobe with text_mutex */
995−static void __kprobes disarm_kprobe(struct kprobe *kp, bool reopt)
984+static void disarm_kprobe(struct kprobe *kp, bool reopt)
996985 {
997986 if (unlikely(kprobe_ftrace(kp))) {
998987 disarm_kprobe_ftrace(kp);
@@ -1008,7 +997,7 @@ static void __kprobes disarm_kprobe(struct kprobe *kp, bool reopt) · 9 unmodified lines
1008997 * Aggregate handlers for multiple kprobes support - these handlers
1009998 * take care of invoking the individual kprobe handlers on p->list
1010999 */
1011−static int __kprobes aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
1000+static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
10121001 {
10131002 struct kprobe *kp;
10141003
@@ -1022,9 +1011,10 @@ static int __kprobes aggr_pre_handler(struct kprobe *p, struct pt_regs *regs) · 7 unmodified lines
10221011 }
10231012 return 0;
10241013 }
1014+NOKPROBE_SYMBOL(aggr_pre_handler);
10251015
1026−static void __kprobes aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
1027− unsigned long flags)
1016+static void aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
1017+ unsigned long flags)
10281018 {
10291019 struct kprobe *kp;
10301020
@@ -1036,9 +1026,10 @@ static void __kprobes aggr_post_handler(struct kprobe *p, struct pt_regs *regs, · 5 unmodified lines
10361026 }
10371027 }
10381028 }
1029+NOKPROBE_SYMBOL(aggr_post_handler);
10391030
1040−static int __kprobes aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
1041− int trapnr)
1031+static int aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
1032+ int trapnr)
10421033 {
10431034 struct kprobe *cur = __this_cpu_read(kprobe_instance);
10441035
@@ -1052,8 +1043,9 @@ static int __kprobes aggr_fault_handler(struct kprobe *p, struct pt_regs *regs, · 7 unmodified lines
10521043 }
10531044 return 0;
10541045 }
1046+NOKPROBE_SYMBOL(aggr_fault_handler);
10551047
1056−static int __kprobes aggr_break_handler(struct kprobe *p, struct pt_regs *regs)
1048+static int aggr_break_handler(struct kprobe *p, struct pt_regs *regs)
10571049 {
10581050 struct kprobe *cur = __this_cpu_read(kprobe_instance);
10591051 int ret = 0;
@@ -1065,9 +1057,10 @@ static int __kprobes aggr_break_handler(struct kprobe *p, struct pt_regs *regs) · 5 unmodified lines
10651057 reset_kprobe_instance();
10661058 return ret;
10671059 }
1060+NOKPROBE_SYMBOL(aggr_break_handler);
10681061
10691062 /* Walks the list and increments nmissed count for multiprobe case */
1070−void __kprobes kprobes_inc_nmissed_count(struct kprobe *p)
1063+void kprobes_inc_nmissed_count(struct kprobe *p)
10711064 {
10721065 struct kprobe *kp;
10731066 if (!kprobe_aggrprobe(p)) {
@@ -1078,9 +1071,10 @@ void __kprobes kprobes_inc_nmissed_count(struct kprobe *p) · 4 unmodified lines
10781071 }
10791072 return;
10801073 }
1074+NOKPROBE_SYMBOL(kprobes_inc_nmissed_count);
10811075
1082−void __kprobes recycle_rp_inst(struct kretprobe_instance *ri,
1083− struct hlist_head *head)
1076+void recycle_rp_inst(struct kretprobe_instance *ri,
1077+ struct hlist_head *head)
10841078 {
10851079 struct kretprobe *rp = ri->rp;
10861080
@@ -1095,8 +1089,9 @@ void __kprobes recycle_rp_inst(struct kretprobe_instance *ri, · 8 unmodified lines
10951089 /* Unregistering */
10961090 hlist_add_head(&ri->hlist, head);
10971091 }
1092+NOKPROBE_SYMBOL(recycle_rp_inst);
10981093
1099−void __kprobes kretprobe_hash_lock(struct task_struct *tsk,
1094+void kretprobe_hash_lock(struct task_struct *tsk,
11001095 struct hlist_head **head, unsigned long *flags)
11011096 __acquires(hlist_lock)
11021097 {
@@ -1107,17 +1102,19 @@ __acquires(hlist_lock) · 4 unmodified lines
11071102 hlist_lock = kretprobe_table_lock_ptr(hash);
11081103 raw_spin_lock_irqsave(hlist_lock, *flags);
11091104 }
1105+NOKPROBE_SYMBOL(kretprobe_hash_lock);
11101106
1111−static void __kprobes kretprobe_table_lock(unsigned long hash,
1112− unsigned long *flags)
1107+static void kretprobe_table_lock(unsigned long hash,
1108+ unsigned long *flags)
11131109 __acquires(hlist_lock)
11141110 {
11151111 raw_spinlock_t *hlist_lock = kretprobe_table_lock_ptr(hash);
11161112 raw_spin_lock_irqsave(hlist_lock, *flags);
11171113 }
1114+NOKPROBE_SYMBOL(kretprobe_table_lock);
11181115
1119−void __kprobes kretprobe_hash_unlock(struct task_struct *tsk,
1120− unsigned long *flags)
1116+void kretprobe_hash_unlock(struct task_struct *tsk,
1117+ unsigned long *flags)
11211118 __releases(hlist_lock)
11221119 {
11231120 unsigned long hash = hash_ptr(tsk, KPROBE_HASH_BITS);
@@ -1126,14 +1123,16 @@ __releases(hlist_lock) · 2 unmodified lines
11261123 hlist_lock = kretprobe_table_lock_ptr(hash);
11271124 raw_spin_unlock_irqrestore(hlist_lock, *flags);
11281125 }
1126+NOKPROBE_SYMBOL(kretprobe_hash_unlock);
11291127
1130−static void __kprobes kretprobe_table_unlock(unsigned long hash,
1131− unsigned long *flags)
1128+static void kretprobe_table_unlock(unsigned long hash,
1129+ unsigned long *flags)
11321130 __releases(hlist_lock)
11331131 {
11341132 raw_spinlock_t *hlist_lock = kretprobe_table_lock_ptr(hash);
11351133 raw_spin_unlock_irqrestore(hlist_lock, *flags);
11361134 }
1135+NOKPROBE_SYMBOL(kretprobe_table_unlock);
11371136
11381137 /*
11391138 * This function is called from finish_task_switch when task tk becomes dead,
@@ -1141,7 +1140,7 @@ __releases(hlist_lock) · 1 unmodified line
11411140 * with this task. These left over instances represent probed functions
11421141 * that have been called but will never return.
11431142 */
1144−void __kprobes kprobe_flush_task(struct task_struct *tk)
1143+void kprobe_flush_task(struct task_struct *tk)
11451144 {
11461145 struct kretprobe_instance *ri;
11471146 struct hlist_head *head, empty_rp;
@@ -1166,6 +1165,7 @@ void __kprobes kprobe_flush_task(struct task_struct *tk) · 18 unmodified lines
11661165 kfree(ri);
11671166 }
11681167 }
1168+NOKPROBE_SYMBOL(kprobe_flush_task);
11691169
11701170 static inline void free_rp_inst(struct kretprobe *rp)
11711171 {
@@ -1178,7 +1178,7 @@ static inline void free_rp_inst(struct kretprobe *rp) · 6 unmodified lines
11781178 }
11791179 }
11801180
1181−static void __kprobes cleanup_rp_inst(struct kretprobe *rp)
1181+static void cleanup_rp_inst(struct kretprobe *rp)
11821182 {
11831183 unsigned long flags, hash;
11841184 struct kretprobe_instance *ri;
@@ -1197,12 +1197,13 @@ static void __kprobes cleanup_rp_inst(struct kretprobe *rp) · 12 unmodified lines
11971197 }
11981198 free_rp_inst(rp);
11991199 }
1200+NOKPROBE_SYMBOL(cleanup_rp_inst);
12001201
12011202 /*
12021203 * Add the new probe to ap->list. Fail if this is the
12031204 * second jprobe at the address - two jprobes can't coexist
12041205 */
1205−static int __kprobes add_new_kprobe(struct kprobe *ap, struct kprobe *p)
1206+static int add_new_kprobe(struct kprobe *ap, struct kprobe *p)
12061207 {
12071208 BUG_ON(kprobe_gone(ap) || kprobe_gone(p));
12081209
@@ -1226,7 +1227,7 @@ static int __kprobes add_new_kprobe(struct kprobe *ap, struct kprobe *p) · 17 unmodified lines
12261227 * Fill in the required fields of the "manager kprobe". Replace the
12271228 * earlier kprobe in the hlist with the manager kprobe
12281229 */
1229−static void __kprobes init_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
1230+static void init_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
12301231 {
12311232 /* Copy p's insn slot to ap */
12321233 copy_kprobe(p, ap);
@@ -1252,8 +1253,7 @@ static void __kprobes init_aggr_kprobe(struct kprobe *ap, struct kprobe *p) · 19 unmodified lines
12521253 * This is the second or subsequent kprobe at the address - handle
12531254 * the intricacies
12541255 */
1255−static int __kprobes register_aggr_kprobe(struct kprobe *orig_p,
1256− struct kprobe *p)
1256+static int register_aggr_kprobe(struct kprobe *orig_p, struct kprobe *p)
12571257 {
12581258 int ret = 0;
12591259 struct kprobe *ap = orig_p;
@@ -1324,25 +1324,29 @@ out: · 64 unmodified lines
13241324 return ret;
13251325 }
13261326
1327−static int __kprobes in_kprobes_functions(unsigned long addr)
1327+bool __weak arch_within_kprobe_blacklist(unsigned long addr)
13281328 {
1329− struct kprobe_blackpoint *kb;
1329+ /* The __kprobes marked functions and entry code must not be probed */
1330+ return addr >= (unsigned long)__kprobes_text_start &&
1331+ addr < (unsigned long)__kprobes_text_end;
1332+}
13301333
1331− if (addr >= (unsigned long)__kprobes_text_start &&
1332− addr < (unsigned long)__kprobes_text_end)
1333− return -EINVAL;
1334+static bool within_kprobe_blacklist(unsigned long addr)
1335+{
1336+ struct kprobe_blacklist_entry *ent;
1337+
1338+ if (arch_within_kprobe_blacklist(addr))
1339+ return true;
13341340 /*
13351341 * If there exists a kprobe_blacklist, verify and
13361342 * fail any probe registration in the prohibited area
13371343 */
1338− for (kb = kprobe_blacklist; kb->name != NULL; kb++) {
1339− if (kb->start_addr) {
1340− if (addr >= kb->start_addr &&
1341− addr < (kb->start_addr + kb->range))
1342− return -EINVAL;
1343− }
1344+ list_for_each_entry(ent, &kprobe_blacklist, list) {
1345+ if (addr >= ent->start_addr && addr < ent->end_addr)
1346+ return true;
13441347 }
1345− return 0;
1348+
1349+ return false;
13461350 }
13471351
13481352 /*
@@ -1351,7 +1355,7 @@ static int __kprobes in_kprobes_functions(unsigned long addr) · 2 unmodified lines
13511355 * This returns encoded errors if it fails to look up symbol or invalid
13521356 * combination of parameters.
13531357 */
1354−static kprobe_opcode_t __kprobes *kprobe_addr(struct kprobe *p)
1358+static kprobe_opcode_t *kprobe_addr(struct kprobe *p)
13551359 {
13561360 kprobe_opcode_t *addr = p->addr;
13571361
@@ -1374,7 +1378,7 @@ invalid: · 16 unmodified lines
13741378 }
13751379
13761380 /* Check passed kprobe is valid and return kprobe in kprobe_table. */
1377−static struct kprobe * __kprobes __get_valid_kprobe(struct kprobe *p)
1381+static struct kprobe *__get_valid_kprobe(struct kprobe *p)
13781382 {
13791383 struct kprobe *ap, *list_p;
13801384
@@ -1406,8 +1410,8 @@ static inline int check_kprobe_rereg(struct kprobe *p) · 25 unmodified lines
14061410 return ret;
14071411 }
14081412
1409−static __kprobes int check_kprobe_address_safe(struct kprobe *p,
1410− struct module **probed_mod)
1413+static int check_kprobe_address_safe(struct kprobe *p,
1414+ struct module **probed_mod)
14111415 {
14121416 int ret = 0;
14131417 unsigned long ftrace_addr;
@@ -1433,7 +1437,7 @@ static __kprobes int check_kprobe_address_safe(struct kprobe *p, · 19 unmodified lines
14331437
14341438 /* Ensure it is not in reserved area nor out of text */
14351439 if (!kernel_text_address((unsigned long) p->addr) ||
1436− in_kprobes_functions((unsigned long) p->addr) ||
1440+ within_kprobe_blacklist((unsigned long) p->addr) ||
14371441 jump_label_text_reserved(p->addr, p->addr)) {
14381442 ret = -EINVAL;
14391443 goto out;
@@ -1469,7 +1473,7 @@ out: · 29 unmodified lines
14691473 return ret;
14701474 }
14711475
1472−int __kprobes register_kprobe(struct kprobe *p)
1476+int register_kprobe(struct kprobe *p)
14731477 {
14741478 int ret;
14751479 struct kprobe *old_p;
@@ -1531,7 +1535,7 @@ out: · 55 unmodified lines
15311535 EXPORT_SYMBOL_GPL(register_kprobe);
15321536
15331537 /* Check if all probes on the aggrprobe are disabled */
1534−static int __kprobes aggr_kprobe_disabled(struct kprobe *ap)
1538+static int aggr_kprobe_disabled(struct kprobe *ap)
15351539 {
15361540 struct kprobe *kp;
15371541
@@ -1547,7 +1551,7 @@ static int __kprobes aggr_kprobe_disabled(struct kprobe *ap) · 9 unmodified lines
15471551 }
15481552
15491553 /* Disable one kprobe: Make sure called under kprobe_mutex is locked */
1550−static struct kprobe *__kprobes __disable_kprobe(struct kprobe *p)
1554+static struct kprobe *__disable_kprobe(struct kprobe *p)
15511555 {
15521556 struct kprobe *orig_p;
15531557
@@ -1574,7 +1578,7 @@ static struct kprobe *__kprobes __disable_kprobe(struct kprobe *p) · 20 unmodified lines
15741578 /*
15751579 * Unregister a kprobe without a scheduler synchronization.
15761580 */
1577−static int __kprobes __unregister_kprobe_top(struct kprobe *p)
1581+static int __unregister_kprobe_top(struct kprobe *p)
15781582 {
15791583 struct kprobe *ap, *list_p;
15801584
@@ -1631,7 +1635,7 @@ disarmed: · 50 unmodified lines
16311635 return 0;
16321636 }
16331637
1634−static void __kprobes __unregister_kprobe_bottom(struct kprobe *p)
1638+static void __unregister_kprobe_bottom(struct kprobe *p)
16351639 {
16361640 struct kprobe *ap;
16371641
@@ -1647,7 +1651,7 @@ static void __kprobes __unregister_kprobe_bottom(struct kprobe *p) · 9 unmodified lines
16471651 /* Otherwise, do nothing. */
16481652 }
16491653
1650−int __kprobes register_kprobes(struct kprobe **kps, int num)
1654+int register_kprobes(struct kprobe **kps, int num)
16511655 {
16521656 int i, ret = 0;
16531657
@@ -1665,13 +1669,13 @@ int __kprobes register_kprobes(struct kprobe **kps, int num) · 11 unmodified lines
16651669 }
16661670 EXPORT_SYMBOL_GPL(register_kprobes);
16671671
1668−void __kprobes unregister_kprobe(struct kprobe *p)
1672+void unregister_kprobe(struct kprobe *p)
16691673 {
16701674 unregister_kprobes(&p, 1);
16711675 }
16721676 EXPORT_SYMBOL_GPL(unregister_kprobe);
16731677
1674−void __kprobes unregister_kprobes(struct kprobe **kps, int num)
1678+void unregister_kprobes(struct kprobe **kps, int num)
16751679 {
16761680 int i;
16771681
@@ -1700,7 +1704,7 @@ unsigned long __weak arch_deref_entry_point(void *entry) · 22 unmodified lines
17001704 return (unsigned long)entry;
17011705 }
17021706
1703−int __kprobes register_jprobes(struct jprobe **jps, int num)
1707+int register_jprobes(struct jprobe **jps, int num)
17041708 {
17051709 struct jprobe *jp;
17061710 int ret = 0, i;
@@ -1731,19 +1735,19 @@ int __kprobes register_jprobes(struct jprobe **jps, int num) · 24 unmodified lines
17311735 }
17321736 EXPORT_SYMBOL_GPL(register_jprobes);
17331737
1734−int __kprobes register_jprobe(struct jprobe *jp)
1738+int register_jprobe(struct jprobe *jp)
17351739 {
17361740 return register_jprobes(&jp, 1);
17371741 }
17381742 EXPORT_SYMBOL_GPL(register_jprobe);
17391743
1740−void __kprobes unregister_jprobe(struct jprobe *jp)
1744+void unregister_jprobe(struct jprobe *jp)
17411745 {
17421746 unregister_jprobes(&jp, 1);
17431747 }
17441748 EXPORT_SYMBOL_GPL(unregister_jprobe);
17451749
1746−void __kprobes unregister_jprobes(struct jprobe **jps, int num)
1750+void unregister_jprobes(struct jprobe **jps, int num)
17471751 {
17481752 int i;
17491753
@@ -1768,8 +1772,7 @@ EXPORT_SYMBOL_GPL(unregister_jprobes); · 18 unmodified lines
17681772 * This kprobe pre_handler is registered with every kretprobe. When probe
17691773 * hits it will set up the return probe.
17701774 */
1771−static int __kprobes pre_handler_kretprobe(struct kprobe *p,
1772− struct pt_regs *regs)
1775+static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
17731776 {
17741777 struct kretprobe *rp = container_of(p, struct kretprobe, kp);
17751778 unsigned long hash, flags = 0;
@@ -1807,8 +1810,9 @@ static int __kprobes pre_handler_kretprobe(struct kprobe *p, · 31 unmodified lines
18071810 }
18081811 return 0;
18091812 }
1813+NOKPROBE_SYMBOL(pre_handler_kretprobe);
18101814
1811−int __kprobes register_kretprobe(struct kretprobe *rp)
1815+int register_kretprobe(struct kretprobe *rp)
18121816 {
18131817 int ret = 0;
18141818 struct kretprobe_instance *inst;
@@ -1861,7 +1865,7 @@ int __kprobes register_kretprobe(struct kretprobe *rp) · 46 unmodified lines
18611865 }
18621866 EXPORT_SYMBOL_GPL(register_kretprobe);
18631867
1864−int __kprobes register_kretprobes(struct kretprobe **rps, int num)
1868+int register_kretprobes(struct kretprobe **rps, int num)
18651869 {
18661870 int ret = 0, i;
18671871
@@ -1879,13 +1883,13 @@ int __kprobes register_kretprobes(struct kretprobe **rps, int num) · 11 unmodified lines
18791883 }
18801884 EXPORT_SYMBOL_GPL(register_kretprobes);
18811885
1882−void __kprobes unregister_kretprobe(struct kretprobe *rp)
1886+void unregister_kretprobe(struct kretprobe *rp)
18831887 {
18841888 unregister_kretprobes(&rp, 1);
18851889 }
18861890 EXPORT_SYMBOL_GPL(unregister_kretprobe);
18871891
1888−void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1892+void unregister_kretprobes(struct kretprobe **rps, int num)
18891893 {
18901894 int i;
18911895
@@ -1908,38 +1912,38 @@ void __kprobes unregister_kretprobes(struct kretprobe **rps, int num) · 16 unmodified lines
19081912 EXPORT_SYMBOL_GPL(unregister_kretprobes);
19091913
19101914 #else /* CONFIG_KRETPROBES */
1911−int __kprobes register_kretprobe(struct kretprobe *rp)
1915+int register_kretprobe(struct kretprobe *rp)
19121916 {
19131917 return -ENOSYS;
19141918 }
19151919 EXPORT_SYMBOL_GPL(register_kretprobe);
19161920
1917−int __kprobes register_kretprobes(struct kretprobe **rps, int num)
1921+int register_kretprobes(struct kretprobe **rps, int num)
19181922 {
19191923 return -ENOSYS;
19201924 }
19211925 EXPORT_SYMBOL_GPL(register_kretprobes);
19221926
1923−void __kprobes unregister_kretprobe(struct kretprobe *rp)
1927+void unregister_kretprobe(struct kretprobe *rp)
19241928 {
19251929 }
19261930 EXPORT_SYMBOL_GPL(unregister_kretprobe);
19271931
1928−void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1932+void unregister_kretprobes(struct kretprobe **rps, int num)
19291933 {
19301934 }
19311935 EXPORT_SYMBOL_GPL(unregister_kretprobes);
19321936
1933−static int __kprobes pre_handler_kretprobe(struct kprobe *p,
1934− struct pt_regs *regs)
1937+static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
19351938 {
19361939 return 0;
19371940 }
1941+NOKPROBE_SYMBOL(pre_handler_kretprobe);
19381942
19391943 #endif /* CONFIG_KRETPROBES */
19401944
19411945 /* Set the kprobe gone and remove its instruction buffer. */
1942−static void __kprobes kill_kprobe(struct kprobe *p)
1946+static void kill_kprobe(struct kprobe *p)
19431947 {
19441948 struct kprobe *kp;
19451949
@@ -1963,7 +1967,7 @@ static void __kprobes kill_kprobe(struct kprobe *p) · 17 unmodified lines
19631967 }
19641968
19651969 /* Disable one kprobe */
1966−int __kprobes disable_kprobe(struct kprobe *kp)
1970+int disable_kprobe(struct kprobe *kp)
19671971 {
19681972 int ret = 0;
19691973
@@ -1979,7 +1983,7 @@ int __kprobes disable_kprobe(struct kprobe *kp) · 9 unmodified lines
19791983 EXPORT_SYMBOL_GPL(disable_kprobe);
19801984
19811985 /* Enable one kprobe */
1982−int __kprobes enable_kprobe(struct kprobe *kp)
1986+int enable_kprobe(struct kprobe *kp)
19831987 {
19841988 int ret = 0;
19851989 struct kprobe *p;
@@ -2012,16 +2016,49 @@ out: · 26 unmodified lines
20122016 }
20132017 EXPORT_SYMBOL_GPL(enable_kprobe);
20142018
2015−void __kprobes dump_kprobe(struct kprobe *kp)
2019+void dump_kprobe(struct kprobe *kp)
20162020 {
20172021 printk(KERN_WARNING "Dumping kprobe:\n");
20182022 printk(KERN_WARNING "Name: %s\nAddress: %p\nOffset: %x\n",
20192023 kp->symbol_name, kp->addr, kp->offset);
20202024 }
2025+NOKPROBE_SYMBOL(dump_kprobe);
2026+
2027+/*
2028+ * Lookup and populate the kprobe_blacklist.
2029+ *
2030+ * Unlike the kretprobe blacklist, we'll need to determine
2031+ * the range of addresses that belong to the said functions,
2032+ * since a kprobe need not necessarily be at the beginning
2033+ * of a function.
2034+ */
2035+static int __init populate_kprobe_blacklist(unsigned long *start,
2036+ unsigned long *end)
2037+{
2038+ unsigned long *iter;
2039+ struct kprobe_blacklist_entry *ent;
2040+ unsigned long offset = 0, size = 0;
2041+
2042+ for (iter = start; iter < end; iter++) {
2043+ if (!kallsyms_lookup_size_offset(*iter, &size, &offset)) {
2044+ pr_err("Failed to find blacklist %p\n", (void *)*iter);
2045+ continue;
2046+ }
2047+
2048+ ent = kmalloc(sizeof(*ent), GFP_KERNEL);
2049+ if (!ent)
2050+ return -ENOMEM;
2051+ ent->start_addr = *iter;
2052+ ent->end_addr = *iter + size;
2053+ INIT_LIST_HEAD(&ent->list);
2054+ list_add_tail(&ent->list, &kprobe_blacklist);
2055+ }
2056+ return 0;
2057+}
20212058
20222059 /* Module notifier call back, checking kprobes on the module */
2023−static int __kprobes kprobes_module_callback(struct notifier_block *nb,
2024− unsigned long val, void *data)
2060+static int kprobes_module_callback(struct notifier_block *nb,
2061+ unsigned long val, void *data)
20252062 {
20262063 struct module *mod = data;
20272064 struct hlist_head *head;
@@ -2062,14 +2099,13 @@ static struct notifier_block kprobe_module_nb = { · 34 unmodified lines
20622099 .priority = 0
20632100 };
20642101
2102+/* Markers of _kprobe_blacklist section */
2103+extern unsigned long __start_kprobe_blacklist[];
2104+extern unsigned long __stop_kprobe_blacklist[];
2105+
20652106 static int __init init_kprobes(void)
20662107 {
20672108 int i, err = 0;
2068− unsigned long offset = 0, size = 0;
2069− char *modname, namebuf[KSYM_NAME_LEN];
2070− const char *symbol_name;
2071− void *addr;
2072− struct kprobe_blackpoint *kb;
20732109
20742110 /* FIXME allocate the probe table, currently defined statically */
20752111 /* initialize all list heads */
@@ -2079,26 +2115,11 @@ static int __init init_kprobes(void) · 3 unmodified lines
20792115 raw_spin_lock_init(&(kretprobe_table_locks[i].lock));
20802116 }
20812117
2082− /*
2083− * Lookup and populate the kprobe_blacklist.
2084− *
2085− * Unlike the kretprobe blacklist, we'll need to determine
2086− * the range of addresses that belong to the said functions,
2087− * since a kprobe need not necessarily be at the beginning
2088− * of a function.
2089− */
2090− for (kb = kprobe_blacklist; kb->name != NULL; kb++) {
2091− kprobe_lookup_name(kb->name, addr);
2092− if (!addr)
2093− continue;
2094−
2095− kb->start_addr = (unsigned long)addr;
2096− symbol_name = kallsyms_lookup(kb->start_addr,
2097− &size, &offset, &modname, namebuf);
2098− if (!symbol_name)
2099− kb->range = 0;
2100− else
2101− kb->range = size;
2118+ err = populate_kprobe_blacklist(__start_kprobe_blacklist,
2119+ __stop_kprobe_blacklist);
2120+ if (err) {
2121+ pr_err("kprobes: failed to populate blacklist: %d\n", err);
2122+ pr_err("Please take care of using kprobes.\n");
21022123 }
21032124
21042125 if (kretprobe_blacklist_size) {
@@ -2138,7 +2159,7 @@ static int __init init_kprobes(void) · 33 unmodified lines
21382159 }
21392160
21402161 #ifdef CONFIG_DEBUG_FS
2141−static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
2162+static void report_probe(struct seq_file *pi, struct kprobe *p,
21422163 const char *sym, int offset, char *modname, struct kprobe *pp)
21432164 {
21442165 char *kprobe_type;
@@ -2167,12 +2188,12 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p, · 22 unmodified lines
21672188 (kprobe_ftrace(pp) ? "[FTRACE]" : ""));
21682189 }
21692190
2170−static void __kprobes *kprobe_seq_start(struct seq_file *f, loff_t *pos)
2191+static void *kprobe_seq_start(struct seq_file *f, loff_t *pos)
21712192 {
21722193 return (*pos < KPROBE_TABLE_SIZE) ? pos : NULL;
21732194 }
21742195
2175−static void __kprobes *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos)
2196+static void *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos)
21762197 {
21772198 (*pos)++;
21782199 if (*pos >= KPROBE_TABLE_SIZE)
@@ -2180,12 +2201,12 @@ static void __kprobes *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos) · 1 unmodified line
21802201 return pos;
21812202 }
21822203
2183−static void __kprobes kprobe_seq_stop(struct seq_file *f, void *v)
2204+static void kprobe_seq_stop(struct seq_file *f, void *v)
21842205 {
21852206 /* Nothing to do */
21862207 }
21872208
2188−static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v)
2209+static int show_kprobe_addr(struct seq_file *pi, void *v)
21892210 {
21902211 struct hlist_head *head;
21912212 struct kprobe *p, *kp;
@@ -2216,7 +2237,7 @@ static const struct seq_operations kprobes_seq_ops = { · 24 unmodified lines
22162237 .show = show_kprobe_addr
22172238 };
22182239
2219−static int __kprobes kprobes_open(struct inode *inode, struct file *filp)
2240+static int kprobes_open(struct inode *inode, struct file *filp)
22202241 {
22212242 return seq_open(filp, &kprobes_seq_ops);
22222243 }
@@ -2228,7 +2249,47 @@ static const struct file_operations debugfs_kprobes_operations = { · 5 unmodified lines
22282249 .release = seq_release,
22292250 };
22302251
2231−static void __kprobes arm_all_kprobes(void)
2252+/* kprobes/blacklist -- shows which functions can not be probed */
2253+static void *kprobe_blacklist_seq_start(struct seq_file *m, loff_t *pos)
2254+{
2255+ return seq_list_start(&kprobe_blacklist, *pos);
2256+}
2257+
2258+static void *kprobe_blacklist_seq_next(struct seq_file *m, void *v, loff_t *pos)
2259+{
2260+ return seq_list_next(v, &kprobe_blacklist, pos);
2261+}
2262+
2263+static int kprobe_blacklist_seq_show(struct seq_file *m, void *v)
2264+{
2265+ struct kprobe_blacklist_entry *ent =
2266+ list_entry(v, struct kprobe_blacklist_entry, list);
2267+
2268+ seq_printf(m, "0x%p-0x%p\t%ps\n", (void *)ent->start_addr,
2269+ (void *)ent->end_addr, (void *)ent->start_addr);
2270+ return 0;
2271+}
2272+
2273+static const struct seq_operations kprobe_blacklist_seq_ops = {
2274+ .start = kprobe_blacklist_seq_start,
2275+ .next = kprobe_blacklist_seq_next,
2276+ .stop = kprobe_seq_stop, /* Reuse void function */
2277+ .show = kprobe_blacklist_seq_show,
2278+};
2279+
2280+static int kprobe_blacklist_open(struct inode *inode, struct file *filp)
2281+{
2282+ return seq_open(filp, &kprobe_blacklist_seq_ops);
2283+}
2284+
2285+static const struct file_operations debugfs_kprobe_blacklist_ops = {
2286+ .open = kprobe_blacklist_open,
2287+ .read = seq_read,
2288+ .llseek = seq_lseek,
2289+ .release = seq_release,
2290+};
2291+
2292+static void arm_all_kprobes(void)
22322293 {
22332294 struct hlist_head *head;
22342295 struct kprobe *p;
@@ -2256,7 +2317,7 @@ already_enabled: · 21 unmodified lines
22562317 return;
22572318 }
22582319
2259−static void __kprobes disarm_all_kprobes(void)
2320+static void disarm_all_kprobes(void)
22602321 {
22612322 struct hlist_head *head;
22622323 struct kprobe *p;
@@ -2340,7 +2401,7 @@ static const struct file_operations fops_kp = { · 77 unmodified lines
23402401 .llseek = default_llseek,
23412402 };
23422403
2343−static int __kprobes debugfs_kprobe_init(void)
2404+static int __init debugfs_kprobe_init(void)
23442405 {
23452406 struct dentry *dir, *file;
23462407 unsigned int value = 1;
@@ -2351,19 +2412,24 @@ static int __kprobes debugfs_kprobe_init(void) · 4 unmodified lines
23512412
23522413 file = debugfs_create_file("list", 0444, dir, NULL,
23532414 &debugfs_kprobes_operations);
2354− if (!file) {
2355− debugfs_remove(dir);
2356− return -ENOMEM;
2357− }
2415+ if (!file)
2416+ goto error;
23582417
23592418 file = debugfs_create_file("enabled", 0600, dir,
23602419 &value, &fops_kp);
2361− if (!file) {
2362− debugfs_remove(dir);
2363− return -ENOMEM;
2364− }
2420+ if (!file)
2421+ goto error;
2422+
2423+ file = debugfs_create_file("blacklist", 0444, dir, NULL,
2424+ &debugfs_kprobe_blacklist_ops);
2425+ if (!file)
2426+ goto error;
23652427
23662428 return 0;
2429+
2430+error:
2431+ debugfs_remove(dir);
2432+ return -ENOMEM;
23672433 }
23682434
23692435 late_initcall(debugfs_kprobe_init);
kernel/notifier.c+13−9
@@ -71,9 +71,9 @@ static int notifier_chain_unregister(struct notifier_block **nl, · 70 unmodified lines
7171 * @returns: notifier_call_chain returns the value returned by the
7272 * last notifier function called.
7373 */
74−static int __kprobes notifier_call_chain(struct notifier_block **nl,
75− unsigned long val, void *v,
76− int nr_to_call, int *nr_calls)
74+static int notifier_call_chain(struct notifier_block **nl,
75+ unsigned long val, void *v,
76+ int nr_to_call, int *nr_calls)
7777 {
7878 int ret = NOTIFY_DONE;
7979 struct notifier_block *nb, *next_nb;
@@ -102,6 +102,7 @@ static int __kprobes notifier_call_chain(struct notifier_block **nl, · 22 unmodified lines
102102 }
103103 return ret;
104104 }
105+NOKPROBE_SYMBOL(notifier_call_chain);
105106
106107 /*
107108 * Atomic notifier chain routines. Registration and unregistration
@@ -172,9 +173,9 @@ EXPORT_SYMBOL_GPL(atomic_notifier_chain_unregister); · 64 unmodified lines
172173 * Otherwise the return value is the return value
173174 * of the last notifier function called.
174175 */
175−int __kprobes __atomic_notifier_call_chain(struct atomic_notifier_head *nh,
176− unsigned long val, void *v,
177− int nr_to_call, int *nr_calls)
176+int __atomic_notifier_call_chain(struct atomic_notifier_head *nh,
177+ unsigned long val, void *v,
178+ int nr_to_call, int *nr_calls)
178179 {
179180 int ret;
180181
@@ -184,13 +185,15 @@ int __kprobes __atomic_notifier_call_chain(struct atomic_notifier_head *nh, · 3 unmodified lines
184185 return ret;
185186 }
186187 EXPORT_SYMBOL_GPL(__atomic_notifier_call_chain);
188+NOKPROBE_SYMBOL(__atomic_notifier_call_chain);
187189
188−int __kprobes atomic_notifier_call_chain(struct atomic_notifier_head *nh,
189− unsigned long val, void *v)
190+int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
191+ unsigned long val, void *v)
190192 {
191193 return __atomic_notifier_call_chain(nh, val, v, -1, NULL);
192194 }
193195 EXPORT_SYMBOL_GPL(atomic_notifier_call_chain);
196+NOKPROBE_SYMBOL(atomic_notifier_call_chain);
194197
195198 /*
196199 * Blocking notifier chain routines. All access to the chain is
@@ -527,7 +530,7 @@ EXPORT_SYMBOL_GPL(srcu_init_notifier_head); · 330 unmodified lines
527530
528531 static ATOMIC_NOTIFIER_HEAD(die_chain);
529532
530−int notrace __kprobes notify_die(enum die_val val, const char *str,
533+int notrace notify_die(enum die_val val, const char *str,
531534 struct pt_regs *regs, long err, int trap, int sig)
532535 {
533536 struct die_args args = {
@@ -540,6 +543,7 @@ int notrace __kprobes notify_die(enum die_val val, const char *str, · 6 unmodified lines
540543 };
541544 return atomic_notifier_call_chain(&die_chain, val, &args);
542545 }
546+NOKPROBE_SYMBOL(notify_die);
543547
544548 int register_die_notifier(struct notifier_block *nb)
545549 {
kernel/sched/core.c+5−2
@@ -2527,7 +2527,7 @@ notrace unsigned long get_parent_ip(unsigned long addr) · 2526 unmodified lines
25272527 #if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \
25282528 defined(CONFIG_PREEMPT_TRACER))
25292529
2530−void __kprobes preempt_count_add(int val)
2530+void preempt_count_add(int val)
25312531 {
25322532 #ifdef CONFIG_DEBUG_PREEMPT
25332533 /*
@@ -2553,8 +2553,9 @@ void __kprobes preempt_count_add(int val) · 19 unmodified lines
25532553 }
25542554 }
25552555 EXPORT_SYMBOL(preempt_count_add);
2556+NOKPROBE_SYMBOL(preempt_count_add);
25562557
2557−void __kprobes preempt_count_sub(int val)
2558+void preempt_count_sub(int val)
25582559 {
25592560 #ifdef CONFIG_DEBUG_PREEMPT
25602561 /*
@@ -2575,6 +2576,7 @@ void __kprobes preempt_count_sub(int val) · 14 unmodified lines
25752576 __preempt_count_sub(val);
25762577 }
25772578 EXPORT_SYMBOL(preempt_count_sub);
2579+NOKPROBE_SYMBOL(preempt_count_sub);
25782580
25792581 #endif
25802582
@@ -2857,6 +2859,7 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) · 276 unmodified lines
28572859 barrier();
28582860 } while (need_resched());
28592861 }
2862+NOKPROBE_SYMBOL(preempt_schedule);
28602863 EXPORT_SYMBOL(preempt_schedule);
28612864 #endif /* CONFIG_PREEMPT */
28622865
kernel/trace/trace_event_perf.c+3−2
@@ -248,8 +248,8 @@ void perf_trace_del(struct perf_event *p_event, int flags) · 247 unmodified lines
248248 tp_event->class->reg(tp_event, TRACE_REG_PERF_DEL, p_event);
249249 }
250250
251−__kprobes void *perf_trace_buf_prepare(int size, unsigned short type,
252− struct pt_regs *regs, int *rctxp)
251+void *perf_trace_buf_prepare(int size, unsigned short type,
252+ struct pt_regs *regs, int *rctxp)
253253 {
254254 struct trace_entry *entry;
255255 unsigned long flags;
@@ -281,6 +281,7 @@ __kprobes void *perf_trace_buf_prepare(int size, unsigned short type, · 25 unmodified lines
281281 return raw_data;
282282 }
283283 EXPORT_SYMBOL_GPL(perf_trace_buf_prepare);
284+NOKPROBE_SYMBOL(perf_trace_buf_prepare);
284285
285286 #ifdef CONFIG_FUNCTION_TRACER
286287 static void
kernel/trace/trace_kprobe.c+41−30
@@ -40,27 +40,27 @@ struct trace_kprobe { · 39 unmodified lines
4040 (sizeof(struct probe_arg) * (n)))
4141
4242
43−static __kprobes bool trace_kprobe_is_return(struct trace_kprobe *tk)
43+static nokprobe_inline bool trace_kprobe_is_return(struct trace_kprobe *tk)
4444 {
4545 return tk->rp.handler != NULL;
4646 }
4747
48−static __kprobes const char *trace_kprobe_symbol(struct trace_kprobe *tk)
48+static nokprobe_inline const char *trace_kprobe_symbol(struct trace_kprobe *tk)
4949 {
5050 return tk->symbol ? tk->symbol : "unknown";
5151 }
5252
53−static __kprobes unsigned long trace_kprobe_offset(struct trace_kprobe *tk)
53+static nokprobe_inline unsigned long trace_kprobe_offset(struct trace_kprobe *tk)
5454 {
5555 return tk->rp.kp.offset;
5656 }
5757
58−static __kprobes bool trace_kprobe_has_gone(struct trace_kprobe *tk)
58+static nokprobe_inline bool trace_kprobe_has_gone(struct trace_kprobe *tk)
5959 {
6060 return !!(kprobe_gone(&tk->rp.kp));
6161 }
6262
63−static __kprobes bool trace_kprobe_within_module(struct trace_kprobe *tk,
63+static nokprobe_inline bool trace_kprobe_within_module(struct trace_kprobe *tk,
6464 struct module *mod)
6565 {
6666 int len = strlen(mod->name);
@@ -68,7 +68,7 @@ static __kprobes bool trace_kprobe_within_module(struct trace_kprobe *tk, · 1 unmodified line
6868 return strncmp(mod->name, name, len) == 0 && name[len] == ':';
6969 }
7070
71−static __kprobes bool trace_kprobe_is_on_module(struct trace_kprobe *tk)
71+static nokprobe_inline bool trace_kprobe_is_on_module(struct trace_kprobe *tk)
7272 {
7373 return !!strchr(trace_kprobe_symbol(tk), ':');
7474 }
@@ -132,19 +132,21 @@ struct symbol_cache *alloc_symbol_cache(const char *sym, long offset) · 57 unmodified lines
132132 * Kprobes-specific fetch functions
133133 */
134134 #define DEFINE_FETCH_stack(type) \
135−static __kprobes void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs,\
135+static void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs, \
136136 void *offset, void *dest) \
137137 { \
138138 *(type *)dest = (type)regs_get_kernel_stack_nth(regs, \
139139 (unsigned int)((unsigned long)offset)); \
140−}
140+} \
141+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(stack, type));
142+
141143 DEFINE_BASIC_FETCH_FUNCS(stack)
142144 /* No string on the stack entry */
143145 #define fetch_stack_string NULL
144146 #define fetch_stack_string_size NULL
145147
146148 #define DEFINE_FETCH_memory(type) \
147−static __kprobes void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs,\
149+static void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs, \
148150 void *addr, void *dest) \
149151 { \
150152 type retval; \
@@ -152,14 +154,16 @@ static __kprobes void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs,\ · 1 unmodified line
152154 *(type *)dest = 0; \
153155 else \
154156 *(type *)dest = retval; \
155−}
157+} \
158+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, type));
159+
156160 DEFINE_BASIC_FETCH_FUNCS(memory)
157161 /*
158162 * Fetch a null-terminated string. Caller MUST set *(u32 *)dest with max
159163 * length and relative data location.
160164 */
161−static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
162− void *addr, void *dest)
165+static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
166+ void *addr, void *dest)
163167 {
164168 long ret;
165169 int maxlen = get_rloc_len(*(u32 *)dest);
@@ -193,10 +197,11 @@ static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs, · 27 unmodified lines
193197 get_rloc_offs(*(u32 *)dest));
194198 }
195199 }
200+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string));
196201
197202 /* Return the length of string -- including null terminal byte */
198−static __kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
199− void *addr, void *dest)
203+static void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
204+ void *addr, void *dest)
200205 {
201206 mm_segment_t old_fs;
202207 int ret, len = 0;
@@ -219,17 +224,19 @@ static __kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs, · 16 unmodified lines
219224 else
220225 *(u32 *)dest = len;
221226 }
227+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string_size));
222228
223229 #define DEFINE_FETCH_symbol(type) \
224−__kprobes void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs, \
225− void *data, void *dest) \
230+void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs, void *data, void *dest)\
226231 { \
227232 struct symbol_cache *sc = data; \
228233 if (sc->addr) \
229234 fetch_memory_##type(regs, (void *)sc->addr, dest); \
230235 else \
231236 *(type *)dest = 0; \
232−}
237+} \
238+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(symbol, type));
239+
233240 DEFINE_BASIC_FETCH_FUNCS(symbol)
234241 DEFINE_FETCH_symbol(string)
235242 DEFINE_FETCH_symbol(string_size)
@@ -907,7 +914,7 @@ static const struct file_operations kprobe_profile_ops = { · 671 unmodified lines
907914 };
908915
909916 /* Kprobe handler */
910−static __kprobes void
917+static nokprobe_inline void
911918 __kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs,
912919 struct ftrace_event_file *ftrace_file)
913920 {
@@ -943,7 +950,7 @@ __kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs, · 29 unmodified lines
943950 entry, irq_flags, pc, regs);
944951 }
945952
946−static __kprobes void
953+static void
947954 kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs)
948955 {
949956 struct event_file_link *link;
@@ -951,9 +958,10 @@ kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs) · 1 unmodified line
951958 list_for_each_entry_rcu(link, &tk->tp.files, list)
952959 __kprobe_trace_func(tk, regs, link->file);
953960 }
961+NOKPROBE_SYMBOL(kprobe_trace_func);
954962
955963 /* Kretprobe handler */
956−static __kprobes void
964+static nokprobe_inline void
957965 __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
958966 struct pt_regs *regs,
959967 struct ftrace_event_file *ftrace_file)
@@ -991,7 +999,7 @@ __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri, · 31 unmodified lines
991999 entry, irq_flags, pc, regs);
9921000 }
9931001
994−static __kprobes void
1002+static void
9951003 kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
9961004 struct pt_regs *regs)
9971005 {
@@ -1000,6 +1008,7 @@ kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri, · 2 unmodified lines
10001008 list_for_each_entry_rcu(link, &tk->tp.files, list)
10011009 __kretprobe_trace_func(tk, ri, regs, link->file);
10021010 }
1011+NOKPROBE_SYMBOL(kretprobe_trace_func);
10031012
10041013 /* Event entry printers */
10051014 static enum print_line_t
@@ -1131,7 +1140,7 @@ static int kretprobe_event_define_fields(struct ftrace_event_call *event_call) · 125 unmodified lines
11311140 #ifdef CONFIG_PERF_EVENTS
11321141
11331142 /* Kprobe profile handler */
1134−static __kprobes void
1143+static void
11351144 kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs)
11361145 {
11371146 struct ftrace_event_call *call = &tk->tp.call;
@@ -1158,9 +1167,10 @@ kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs) · 20 unmodified lines
11581167 store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
11591168 perf_trace_buf_submit(entry, size, rctx, 0, 1, regs, head, NULL);
11601169 }
1170+NOKPROBE_SYMBOL(kprobe_perf_func);
11611171
11621172 /* Kretprobe profile handler */
1163−static __kprobes void
1173+static void
11641174 kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
11651175 struct pt_regs *regs)
11661176 {
@@ -1188,6 +1198,7 @@ kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri, · 21 unmodified lines
11881198 store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
11891199 perf_trace_buf_submit(entry, size, rctx, 0, 1, regs, head, NULL);
11901200 }
1201+NOKPROBE_SYMBOL(kretprobe_perf_func);
11911202 #endif /* CONFIG_PERF_EVENTS */
11921203
11931204 /*
@@ -1196,9 +1207,8 @@ kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri, · 2 unmodified lines
11961207 * kprobe_trace_self_tests_init() does enable_trace_probe/disable_trace_probe
11971208 * lockless, but we can't race with this __init function.
11981209 */
1199−static __kprobes
1200−int kprobe_register(struct ftrace_event_call *event,
1201− enum trace_reg type, void *data)
1210+static int kprobe_register(struct ftrace_event_call *event,
1211+ enum trace_reg type, void *data)
12021212 {
12031213 struct trace_kprobe *tk = (struct trace_kprobe *)event->data;
12041214 struct ftrace_event_file *file = data;
@@ -1224,8 +1234,7 @@ int kprobe_register(struct ftrace_event_call *event, · 19 unmodified lines
12241234 return 0;
12251235 }
12261236
1227−static __kprobes
1228−int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs)
1237+static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs)
12291238 {
12301239 struct trace_kprobe *tk = container_of(kp, struct trace_kprobe, rp.kp);
12311240
@@ -1239,9 +1248,10 @@ int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs) · 7 unmodified lines
12391248 #endif
12401249 return 0; /* We don't tweek kernel, so just return 0 */
12411250 }
1251+NOKPROBE_SYMBOL(kprobe_dispatcher);
12421252
1243−static __kprobes
1244−int kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs)
1253+static int
1254+kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs)
12451255 {
12461256 struct trace_kprobe *tk = container_of(ri->rp, struct trace_kprobe, rp);
12471257
@@ -1255,6 +1265,7 @@ int kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs) · 7 unmodified lines
12551265 #endif
12561266 return 0; /* We don't tweek kernel, so just return 0 */
12571267 }
1268+NOKPROBE_SYMBOL(kretprobe_dispatcher);
12581269
12591270 static struct trace_event_functions kretprobe_funcs = {
12601271 .trace = print_kretprobe_event
kernel/trace/trace_probe.c+35−30
@@ -37,13 +37,13 @@ const char *reserved_field_names[] = { · 36 unmodified lines
3737
3838 /* Printing in basic type function template */
3939 #define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \
40−__kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \
41− const char *name, \
42− void *data, void *ent) \
40+int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, const char *name, \
41+ void *data, void *ent) \
4342 { \
4443 return trace_seq_printf(s, " %s=" fmt, name, *(type *)data); \
4544 } \
46−const char PRINT_TYPE_FMT_NAME(type)[] = fmt;
45+const char PRINT_TYPE_FMT_NAME(type)[] = fmt; \
46+NOKPROBE_SYMBOL(PRINT_TYPE_FUNC_NAME(type));
4747
4848 DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "0x%x")
4949 DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "0x%x")
@@ -55,9 +55,8 @@ DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%d") · 5 unmodified lines
5555 DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%Ld")
5656
5757 /* Print type function for string type */
58−__kprobes int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s,
59− const char *name,
60− void *data, void *ent)
58+int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s, const char *name,
59+ void *data, void *ent)
6160 {
6261 int len = *(u32 *)data >> 16;
6362
@@ -67,6 +66,7 @@ __kprobes int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s, · 3 unmodified lines
6766 return trace_seq_printf(s, " %s=\"%s\"", name,
6867 (const char *)get_loc_data(data, ent));
6968 }
69+NOKPROBE_SYMBOL(PRINT_TYPE_FUNC_NAME(string));
7070
7171 const char PRINT_TYPE_FMT_NAME(string)[] = "\\\"%s\\\"";
7272
@@ -81,23 +81,24 @@ const char PRINT_TYPE_FMT_NAME(string)[] = "\\\"%s\\\""; · 8 unmodified lines
8181
8282 /* Data fetch function templates */
8383 #define DEFINE_FETCH_reg(type) \
84−__kprobes void FETCH_FUNC_NAME(reg, type)(struct pt_regs *regs, \
85− void *offset, void *dest) \
84+void FETCH_FUNC_NAME(reg, type)(struct pt_regs *regs, void *offset, void *dest) \
8685 { \
8786 *(type *)dest = (type)regs_get_register(regs, \
8887 (unsigned int)((unsigned long)offset)); \
89−}
88+} \
89+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(reg, type));
9090 DEFINE_BASIC_FETCH_FUNCS(reg)
9191 /* No string on the register */
9292 #define fetch_reg_string NULL
9393 #define fetch_reg_string_size NULL
9494
9595 #define DEFINE_FETCH_retval(type) \
96−__kprobes void FETCH_FUNC_NAME(retval, type)(struct pt_regs *regs, \
97− void *dummy, void *dest) \
96+void FETCH_FUNC_NAME(retval, type)(struct pt_regs *regs, \
97+ void *dummy, void *dest) \
9898 { \
9999 *(type *)dest = (type)regs_return_value(regs); \
100−}
100+} \
101+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(retval, type));
101102 DEFINE_BASIC_FETCH_FUNCS(retval)
102103 /* No string on the retval */
103104 #define fetch_retval_string NULL
@@ -112,8 +113,8 @@ struct deref_fetch_param { · 8 unmodified lines
112113 };
113114
114115 #define DEFINE_FETCH_deref(type) \
115−__kprobes void FETCH_FUNC_NAME(deref, type)(struct pt_regs *regs, \
116− void *data, void *dest) \
116+void FETCH_FUNC_NAME(deref, type)(struct pt_regs *regs, \
117+ void *data, void *dest) \
117118 { \
118119 struct deref_fetch_param *dprm = data; \
119120 unsigned long addr; \
@@ -123,12 +124,13 @@ __kprobes void FETCH_FUNC_NAME(deref, type)(struct pt_regs *regs, \ · 3 unmodified lines
123124 dprm->fetch(regs, (void *)addr, dest); \
124125 } else \
125126 *(type *)dest = 0; \
126−}
127+} \
128+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(deref, type));
127129 DEFINE_BASIC_FETCH_FUNCS(deref)
128130 DEFINE_FETCH_deref(string)
129131
130−__kprobes void FETCH_FUNC_NAME(deref, string_size)(struct pt_regs *regs,
131− void *data, void *dest)
132+void FETCH_FUNC_NAME(deref, string_size)(struct pt_regs *regs,
133+ void *data, void *dest)
132134 {
133135 struct deref_fetch_param *dprm = data;
134136 unsigned long addr;
@@ -140,16 +142,18 @@ __kprobes void FETCH_FUNC_NAME(deref, string_size)(struct pt_regs *regs, · 5 unmodified lines
140142 } else
141143 *(string_size *)dest = 0;
142144 }
145+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(deref, string_size));
143146
144−static __kprobes void update_deref_fetch_param(struct deref_fetch_param *data)
147+static void update_deref_fetch_param(struct deref_fetch_param *data)
145148 {
146149 if (CHECK_FETCH_FUNCS(deref, data->orig.fn))
147150 update_deref_fetch_param(data->orig.data);
148151 else if (CHECK_FETCH_FUNCS(symbol, data->orig.fn))
149152 update_symbol_cache(data->orig.data);
150153 }
154+NOKPROBE_SYMBOL(update_deref_fetch_param);
151155
152−static __kprobes void free_deref_fetch_param(struct deref_fetch_param *data)
156+static void free_deref_fetch_param(struct deref_fetch_param *data)
153157 {
154158 if (CHECK_FETCH_FUNCS(deref, data->orig.fn))
155159 free_deref_fetch_param(data->orig.data);
@@ -157,6 +161,7 @@ static __kprobes void free_deref_fetch_param(struct deref_fetch_param *data) · 1 unmodified line
157161 free_symbol_cache(data->orig.data);
158162 kfree(data);
159163 }
164+NOKPROBE_SYMBOL(free_deref_fetch_param);
160165
161166 /* Bitfield fetch function */
162167 struct bitfield_fetch_param {
@@ -166,8 +171,8 @@ struct bitfield_fetch_param { · 3 unmodified lines
166171 };
167172
168173 #define DEFINE_FETCH_bitfield(type) \
169−__kprobes void FETCH_FUNC_NAME(bitfield, type)(struct pt_regs *regs, \
170− void *data, void *dest) \
174+void FETCH_FUNC_NAME(bitfield, type)(struct pt_regs *regs, \
175+ void *data, void *dest) \
171176 { \
172177 struct bitfield_fetch_param *bprm = data; \
173178 type buf = 0; \
@@ -177,13 +182,13 @@ __kprobes void FETCH_FUNC_NAME(bitfield, type)(struct pt_regs *regs, \ · 3 unmodified lines
177182 buf >>= bprm->low_shift; \
178183 } \
179184 *(type *)dest = buf; \
180−}
181−
185+} \
186+NOKPROBE_SYMBOL(FETCH_FUNC_NAME(bitfield, type));
182187 DEFINE_BASIC_FETCH_FUNCS(bitfield)
183188 #define fetch_bitfield_string NULL
184189 #define fetch_bitfield_string_size NULL
185190
186−static __kprobes void
191+static void
187192 update_bitfield_fetch_param(struct bitfield_fetch_param *data)
188193 {
189194 /*
@@ -196,7 +201,7 @@ update_bitfield_fetch_param(struct bitfield_fetch_param *data) · 6 unmodified lines
196201 update_symbol_cache(data->orig.data);
197202 }
198203
199−static __kprobes void
204+static void
200205 free_bitfield_fetch_param(struct bitfield_fetch_param *data)
201206 {
202207 /*
@@ -255,17 +260,17 @@ fail: · 52 unmodified lines
255260 }
256261
257262 /* Special function : only accept unsigned long */
258−static __kprobes void fetch_kernel_stack_address(struct pt_regs *regs,
259− void *dummy, void *dest)
263+static void fetch_kernel_stack_address(struct pt_regs *regs, void *dummy, void *dest)
260264 {
261265 *(unsigned long *)dest = kernel_stack_pointer(regs);
262266 }
267+NOKPROBE_SYMBOL(fetch_kernel_stack_address);
263268
264−static __kprobes void fetch_user_stack_address(struct pt_regs *regs,
265− void *dummy, void *dest)
269+static void fetch_user_stack_address(struct pt_regs *regs, void *dummy, void *dest)
266270 {
267271 *(unsigned long *)dest = user_stack_pointer(regs);
268272 }
273+NOKPROBE_SYMBOL(fetch_user_stack_address);
269274
270275 static fetch_func_t get_fetch_size_function(const struct fetch_type *type,
271276 fetch_func_t orig_fn,
kernel/trace/trace_probe.h+7−8
@@ -81,13 +81,13 @@ · 80 unmodified lines
8181 */
8282 #define convert_rloc_to_loc(dl, offs) ((u32)(dl) + (offs))
8383
84−static inline void *get_rloc_data(u32 *dl)
84+static nokprobe_inline void *get_rloc_data(u32 *dl)
8585 {
8686 return (u8 *)dl + get_rloc_offs(*dl);
8787 }
8888
8989 /* For data_loc conversion */
90−static inline void *get_loc_data(u32 *dl, void *ent)
90+static nokprobe_inline void *get_loc_data(u32 *dl, void *ent)
9191 {
9292 return (u8 *)ent + get_rloc_offs(*dl);
9393 }
@@ -136,9 +136,8 @@ typedef u32 string_size; · 42 unmodified lines
136136
137137 /* Printing in basic type function template */
138138 #define DECLARE_BASIC_PRINT_TYPE_FUNC(type) \
139−__kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \
140− const char *name, \
141− void *data, void *ent); \
139+int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, const char *name, \
140+ void *data, void *ent); \
142141 extern const char PRINT_TYPE_FMT_NAME(type)[]
143142
144143 DECLARE_BASIC_PRINT_TYPE_FUNC(u8);
@@ -303,7 +302,7 @@ static inline bool trace_probe_is_registered(struct trace_probe *tp) · 158 unmodified lines
303302 return !!(tp->flags & TP_FLAG_REGISTERED);
304303 }
305304
306−static inline __kprobes void call_fetch(struct fetch_param *fprm,
305+static nokprobe_inline void call_fetch(struct fetch_param *fprm,
307306 struct pt_regs *regs, void *dest)
308307 {
309308 return fprm->fn(regs, fprm->data, dest);
@@ -351,7 +350,7 @@ extern ssize_t traceprobe_probes_write(struct file *file, · 41 unmodified lines
351350 extern int traceprobe_command(const char *buf, int (*createfn)(int, char**));
352351
353352 /* Sum up total data length for dynamic arraies (strings) */
354−static inline __kprobes int
353+static nokprobe_inline int
355354 __get_data_size(struct trace_probe *tp, struct pt_regs *regs)
356355 {
357356 int i, ret = 0;
@@ -367,7 +366,7 @@ __get_data_size(struct trace_probe *tp, struct pt_regs *regs) · 9 unmodified lines
367366 }
368367
369368 /* Store the value of each argument */
370−static inline __kprobes void
369+static nokprobe_inline void
371370 store_trace_args(int ent_size, struct trace_probe *tp, struct pt_regs *regs,
372371 u8 *data, int maxlen)
373372 {
kernel/trace/trace_uprobe.c+35−31
@@ -108,8 +108,8 @@ static unsigned long get_user_stack_nth(struct pt_regs *regs, unsigned int n) · 107 unmodified lines
108108 * Uprobes-specific fetch functions
109109 */
110110 #define DEFINE_FETCH_stack(type) \
111−static __kprobes void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs,\
112− void *offset, void *dest) \
111+static void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs, \
112+ void *offset, void *dest) \
113113 { \
114114 *(type *)dest = (type)get_user_stack_nth(regs, \
115115 ((unsigned long)offset)); \
@@ -120,8 +120,8 @@ DEFINE_BASIC_FETCH_FUNCS(stack) · 4 unmodified lines
120120 #define fetch_stack_string_size NULL
121121
122122 #define DEFINE_FETCH_memory(type) \
123−static __kprobes void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs,\
124− void *addr, void *dest) \
123+static void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs, \
124+ void *addr, void *dest) \
125125 { \
126126 type retval; \
127127 void __user *vaddr = (void __force __user *) addr; \
@@ -136,8 +136,8 @@ DEFINE_BASIC_FETCH_FUNCS(memory) · 8 unmodified lines
136136 * Fetch a null-terminated string. Caller MUST set *(u32 *)dest with max
137137 * length and relative data location.
138138 */
139−static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
140− void *addr, void *dest)
139+static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
140+ void *addr, void *dest)
141141 {
142142 long ret;
143143 u32 rloc = *(u32 *)dest;
@@ -158,8 +158,8 @@ static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs, · 14 unmodified lines
158158 }
159159 }
160160
161−static __kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
162− void *addr, void *dest)
161+static void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
162+ void *addr, void *dest)
163163 {
164164 int len;
165165 void __user *vaddr = (void __force __user *) addr;
@@ -184,8 +184,8 @@ static unsigned long translate_user_vaddr(void *file_offset) · 18 unmodified lines
184184 }
185185
186186 #define DEFINE_FETCH_file_offset(type) \
187−static __kprobes void FETCH_FUNC_NAME(file_offset, type)(struct pt_regs *regs,\
188− void *offset, void *dest) \
187+static void FETCH_FUNC_NAME(file_offset, type)(struct pt_regs *regs, \
188+ void *offset, void *dest)\
189189 { \
190190 void *vaddr = (void *)translate_user_vaddr(offset); \
191191 \
@@ -1009,56 +1009,60 @@ uprobe_filter_event(struct trace_uprobe *tu, struct perf_event *event) · 817 unmodified lines
10091009 return __uprobe_perf_filter(&tu->filter, event->hw.tp_target->mm);
10101010 }
10111011
1012−static int uprobe_perf_open(struct trace_uprobe *tu, struct perf_event *event)
1012+static int uprobe_perf_close(struct trace_uprobe *tu, struct perf_event *event)
10131013 {
10141014 bool done;
10151015
10161016 write_lock(&tu->filter.rwlock);
10171017 if (event->hw.tp_target) {
1018− /*
1019− * event->parent != NULL means copy_process(), we can avoid
1020− * uprobe_apply(). current->mm must be probed and we can rely
1021− * on dup_mmap() which preserves the already installed bp's.
1022− *
1023− * attr.enable_on_exec means that exec/mmap will install the
1024− * breakpoints we need.
1025− */
1018+ list_del(&event->hw.tp_list);
10261019 done = tu->filter.nr_systemwide ||
1027− event->parent || event->attr.enable_on_exec ||
1020+ (event->hw.tp_target->flags & PF_EXITING) ||
10281021 uprobe_filter_event(tu, event);
1029− list_add(&event->hw.tp_list, &tu->filter.perf_events);
10301022 } else {
1023+ tu->filter.nr_systemwide--;
10311024 done = tu->filter.nr_systemwide;
1032− tu->filter.nr_systemwide++;
10331025 }
10341026 write_unlock(&tu->filter.rwlock);
10351027
10361028 if (!done)
1037− uprobe_apply(tu->inode, tu->offset, &tu->consumer, true);
1029+ return uprobe_apply(tu->inode, tu->offset, &tu->consumer, false);
10381030
10391031 return 0;
10401032 }
10411033
1042−static int uprobe_perf_close(struct trace_uprobe *tu, struct perf_event *event)
1034+static int uprobe_perf_open(struct trace_uprobe *tu, struct perf_event *event)
10431035 {
10441036 bool done;
1037+ int err;
10451038
10461039 write_lock(&tu->filter.rwlock);
10471040 if (event->hw.tp_target) {
1048− list_del(&event->hw.tp_list);
1041+ /*
1042+ * event->parent != NULL means copy_process(), we can avoid
1043+ * uprobe_apply(). current->mm must be probed and we can rely
1044+ * on dup_mmap() which preserves the already installed bp's.
1045+ *
1046+ * attr.enable_on_exec means that exec/mmap will install the
1047+ * breakpoints we need.
1048+ */
10491049 done = tu->filter.nr_systemwide ||
1050− (event->hw.tp_target->flags & PF_EXITING) ||
1050+ event->parent || event->attr.enable_on_exec ||
10511051 uprobe_filter_event(tu, event);
1052+ list_add(&event->hw.tp_list, &tu->filter.perf_events);
10521053 } else {
1053− tu->filter.nr_systemwide--;
10541054 done = tu->filter.nr_systemwide;
1055+ tu->filter.nr_systemwide++;
10551056 }
10561057 write_unlock(&tu->filter.rwlock);
10571058
1058− if (!done)
1059− uprobe_apply(tu->inode, tu->offset, &tu->consumer, false);
1060−
1061− return 0;
1059+ err = 0;
1060+ if (!done) {
1061+ err = uprobe_apply(tu->inode, tu->offset, &tu->consumer, true);
1062+ if (err)
1063+ uprobe_perf_close(tu, event);
1064+ }
1065+ return err;
10621066 }
10631067
10641068 static bool uprobe_perf_filter(struct uprobe_consumer *uc,