diff options
-rw-r--r-- | arch/powerpc/kernel/kprobes.c | 6 | ||||
-rw-r--r-- | arch/x86_64/kernel/kprobes.c | 6 | ||||
-rw-r--r-- | include/asm-i386/kprobes.h | 2 | ||||
-rw-r--r-- | include/asm-ia64/kprobes.h | 2 | ||||
-rw-r--r-- | include/asm-powerpc/kprobes.h | 3 | ||||
-rw-r--r-- | include/asm-sparc64/kprobes.h | 2 | ||||
-rw-r--r-- | include/asm-x86_64/kprobes.h | 3 | ||||
-rw-r--r-- | include/linux/kprobes.h | 1 | ||||
-rw-r--r-- | kernel/kprobes.c | 4 |
9 files changed, 16 insertions, 13 deletions
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index 93444e32fccd..27b0c40601fb 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c | |||
@@ -80,11 +80,11 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
80 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); | 80 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); |
81 | } | 81 | } |
82 | 82 | ||
83 | void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s) | 83 | void __kprobes arch_remove_kprobe(struct kprobe *p) |
84 | { | 84 | { |
85 | down(s); | 85 | down(&kprobe_mutex); |
86 | free_insn_slot(p->ainsn.insn); | 86 | free_insn_slot(p->ainsn.insn); |
87 | up(s); | 87 | up(&kprobe_mutex); |
88 | } | 88 | } |
89 | 89 | ||
90 | static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs) | 90 | static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs) |
diff --git a/arch/x86_64/kernel/kprobes.c b/arch/x86_64/kernel/kprobes.c index 61a6a9369cbd..b7dc1f816d13 100644 --- a/arch/x86_64/kernel/kprobes.c +++ b/arch/x86_64/kernel/kprobes.c | |||
@@ -220,11 +220,11 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
220 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); | 220 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); |
221 | } | 221 | } |
222 | 222 | ||
223 | void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s) | 223 | void __kprobes arch_remove_kprobe(struct kprobe *p) |
224 | { | 224 | { |
225 | down(s); | 225 | down(&kprobe_mutex); |
226 | free_insn_slot(p->ainsn.insn); | 226 | free_insn_slot(p->ainsn.insn); |
227 | up(s); | 227 | up(&kprobe_mutex); |
228 | } | 228 | } |
229 | 229 | ||
230 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) | 230 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) |
diff --git a/include/asm-i386/kprobes.h b/include/asm-i386/kprobes.h index dc559267ce3e..27cac050a60e 100644 --- a/include/asm-i386/kprobes.h +++ b/include/asm-i386/kprobes.h | |||
@@ -40,7 +40,7 @@ typedef u8 kprobe_opcode_t; | |||
40 | 40 | ||
41 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry | 41 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry |
42 | #define ARCH_SUPPORTS_KRETPROBES | 42 | #define ARCH_SUPPORTS_KRETPROBES |
43 | #define arch_remove_kprobe(p, s) do { } while(0) | 43 | #define arch_remove_kprobe(p) do {} while (0) |
44 | 44 | ||
45 | void kretprobe_trampoline(void); | 45 | void kretprobe_trampoline(void); |
46 | 46 | ||
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h index 698508f4a0cf..a74b68104559 100644 --- a/include/asm-ia64/kprobes.h +++ b/include/asm-ia64/kprobes.h | |||
@@ -89,7 +89,7 @@ struct kprobe_ctlblk { | |||
89 | #define IP_RELATIVE_PREDICT_OPCODE (7) | 89 | #define IP_RELATIVE_PREDICT_OPCODE (7) |
90 | #define LONG_BRANCH_OPCODE (0xC) | 90 | #define LONG_BRANCH_OPCODE (0xC) |
91 | #define LONG_CALL_OPCODE (0xD) | 91 | #define LONG_CALL_OPCODE (0xD) |
92 | #define arch_remove_kprobe(p, s) do { } while(0) | 92 | #define arch_remove_kprobe(p) do {} while (0) |
93 | 93 | ||
94 | typedef struct kprobe_opcode { | 94 | typedef struct kprobe_opcode { |
95 | bundle_t bundle; | 95 | bundle_t bundle; |
diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h index 89dee13c2a4c..f466bc804f41 100644 --- a/include/asm-powerpc/kprobes.h +++ b/include/asm-powerpc/kprobes.h | |||
@@ -33,6 +33,7 @@ | |||
33 | #define __ARCH_WANT_KPROBES_INSN_SLOT | 33 | #define __ARCH_WANT_KPROBES_INSN_SLOT |
34 | 34 | ||
35 | struct pt_regs; | 35 | struct pt_regs; |
36 | struct kprobe; | ||
36 | 37 | ||
37 | typedef unsigned int kprobe_opcode_t; | 38 | typedef unsigned int kprobe_opcode_t; |
38 | #define BREAKPOINT_INSTRUCTION 0x7fe00008 /* trap */ | 39 | #define BREAKPOINT_INSTRUCTION 0x7fe00008 /* trap */ |
@@ -50,7 +51,7 @@ typedef unsigned int kprobe_opcode_t; | |||
50 | 51 | ||
51 | #define ARCH_SUPPORTS_KRETPROBES | 52 | #define ARCH_SUPPORTS_KRETPROBES |
52 | void kretprobe_trampoline(void); | 53 | void kretprobe_trampoline(void); |
53 | extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s); | 54 | extern void arch_remove_kprobe(struct kprobe *p); |
54 | 55 | ||
55 | /* Architecture specific copy of original instruction */ | 56 | /* Architecture specific copy of original instruction */ |
56 | struct arch_specific_insn { | 57 | struct arch_specific_insn { |
diff --git a/include/asm-sparc64/kprobes.h b/include/asm-sparc64/kprobes.h index 27fbdcba724b..e4efe652b54b 100644 --- a/include/asm-sparc64/kprobes.h +++ b/include/asm-sparc64/kprobes.h | |||
@@ -12,7 +12,7 @@ typedef u32 kprobe_opcode_t; | |||
12 | #define MAX_INSN_SIZE 2 | 12 | #define MAX_INSN_SIZE 2 |
13 | 13 | ||
14 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry | 14 | #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry |
15 | #define arch_remove_kprobe(p, s) do { } while(0) | 15 | #define arch_remove_kprobe(p) do {} while (0) |
16 | 16 | ||
17 | /* Architecture specific copy of original instruction*/ | 17 | /* Architecture specific copy of original instruction*/ |
18 | struct arch_specific_insn { | 18 | struct arch_specific_insn { |
diff --git a/include/asm-x86_64/kprobes.h b/include/asm-x86_64/kprobes.h index 3a19ad179220..98a1e95ddb98 100644 --- a/include/asm-x86_64/kprobes.h +++ b/include/asm-x86_64/kprobes.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #define __ARCH_WANT_KPROBES_INSN_SLOT | 30 | #define __ARCH_WANT_KPROBES_INSN_SLOT |
31 | 31 | ||
32 | struct pt_regs; | 32 | struct pt_regs; |
33 | struct kprobe; | ||
33 | 34 | ||
34 | typedef u8 kprobe_opcode_t; | 35 | typedef u8 kprobe_opcode_t; |
35 | #define BREAKPOINT_INSTRUCTION 0xcc | 36 | #define BREAKPOINT_INSTRUCTION 0xcc |
@@ -44,6 +45,7 @@ typedef u8 kprobe_opcode_t; | |||
44 | #define ARCH_SUPPORTS_KRETPROBES | 45 | #define ARCH_SUPPORTS_KRETPROBES |
45 | 46 | ||
46 | void kretprobe_trampoline(void); | 47 | void kretprobe_trampoline(void); |
48 | extern void arch_remove_kprobe(struct kprobe *p); | ||
47 | 49 | ||
48 | /* Architecture specific copy of original instruction*/ | 50 | /* Architecture specific copy of original instruction*/ |
49 | struct arch_specific_insn { | 51 | struct arch_specific_insn { |
@@ -78,7 +80,6 @@ static inline void restore_interrupts(struct pt_regs *regs) | |||
78 | local_irq_enable(); | 80 | local_irq_enable(); |
79 | } | 81 | } |
80 | 82 | ||
81 | extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s); | ||
82 | extern int post_kprobe_handler(struct pt_regs *regs); | 83 | extern int post_kprobe_handler(struct pt_regs *regs); |
83 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); | 84 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); |
84 | extern int kprobe_handler(struct pt_regs *regs); | 85 | extern int kprobe_handler(struct pt_regs *regs); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 59bf240cdb9d..10005bc92a31 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -149,6 +149,7 @@ struct kretprobe_instance { | |||
149 | }; | 149 | }; |
150 | 150 | ||
151 | extern spinlock_t kretprobe_lock; | 151 | extern spinlock_t kretprobe_lock; |
152 | extern struct semaphore kprobe_mutex; | ||
152 | extern int arch_prepare_kprobe(struct kprobe *p); | 153 | extern int arch_prepare_kprobe(struct kprobe *p); |
153 | extern void arch_arm_kprobe(struct kprobe *p); | 154 | extern void arch_arm_kprobe(struct kprobe *p); |
154 | extern void arch_disarm_kprobe(struct kprobe *p); | 155 | extern void arch_disarm_kprobe(struct kprobe *p); |
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 19c42cbf91a0..f24cbab558f1 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
@@ -48,7 +48,7 @@ | |||
48 | static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE]; | 48 | static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE]; |
49 | static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE]; | 49 | static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE]; |
50 | 50 | ||
51 | static DECLARE_MUTEX(kprobe_mutex); /* Protects kprobe_table */ | 51 | DECLARE_MUTEX(kprobe_mutex); /* Protects kprobe_table */ |
52 | DEFINE_SPINLOCK(kretprobe_lock); /* Protects kretprobe_inst_table */ | 52 | DEFINE_SPINLOCK(kretprobe_lock); /* Protects kretprobe_inst_table */ |
53 | static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL; | 53 | static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL; |
54 | 54 | ||
@@ -532,7 +532,7 @@ valid_p: | |||
532 | list_del_rcu(&p->list); | 532 | list_del_rcu(&p->list); |
533 | kfree(old_p); | 533 | kfree(old_p); |
534 | } | 534 | } |
535 | arch_remove_kprobe(p, &kprobe_mutex); | 535 | arch_remove_kprobe(p); |
536 | } | 536 | } |
537 | } | 537 | } |
538 | 538 | ||