diff options
-rw-r--r-- | arch/i386/kernel/kprobes.c | 4 | ||||
-rw-r--r-- | arch/ia64/kernel/kprobes.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/kprobes.c | 4 | ||||
-rw-r--r-- | arch/sparc64/kernel/kprobes.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/kprobes.c | 4 | ||||
-rw-r--r-- | include/asm-i386/kprobes.h | 1 | ||||
-rw-r--r-- | include/asm-ia64/kprobes.h | 1 | ||||
-rw-r--r-- | include/asm-powerpc/kprobes.h | 1 | ||||
-rw-r--r-- | include/asm-sparc64/kprobes.h | 1 | ||||
-rw-r--r-- | include/asm-x86_64/kprobes.h | 1 | ||||
-rw-r--r-- | include/linux/kprobes.h | 1 | ||||
-rw-r--r-- | kernel/kprobes.c | 4 |
12 files changed, 12 insertions, 18 deletions
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c index 68fe10250486..2f372dbd34fd 100644 --- a/arch/i386/kernel/kprobes.c +++ b/arch/i386/kernel/kprobes.c | |||
@@ -77,10 +77,6 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
77 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); | 77 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); |
78 | } | 78 | } |
79 | 79 | ||
80 | void __kprobes arch_remove_kprobe(struct kprobe *p) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) | 80 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) |
85 | { | 81 | { |
86 | kcb->prev_kprobe.kp = kprobe_running(); | 82 | kcb->prev_kprobe.kp = kprobe_running(); |
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c index 89a70400c4f6..4de7f6759093 100644 --- a/arch/ia64/kernel/kprobes.c +++ b/arch/ia64/kernel/kprobes.c | |||
@@ -467,10 +467,6 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
467 | flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); | 467 | flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); |
468 | } | 468 | } |
469 | 469 | ||
470 | void __kprobes arch_remove_kprobe(struct kprobe *p) | ||
471 | { | ||
472 | } | ||
473 | |||
474 | /* | 470 | /* |
475 | * We are resuming execution after a single step fault, so the pt_regs | 471 | * We are resuming execution after a single step fault, so the pt_regs |
476 | * structure reflects the register state after we executed the instruction | 472 | * structure reflects the register state after we executed the instruction |
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index 2cd32dd6898b..93444e32fccd 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c | |||
@@ -80,9 +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) | 83 | void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s) |
84 | { | 84 | { |
85 | down(s); | ||
85 | free_insn_slot(p->ainsn.insn); | 86 | free_insn_slot(p->ainsn.insn); |
87 | up(s); | ||
86 | } | 88 | } |
87 | 89 | ||
88 | 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/sparc64/kernel/kprobes.c b/arch/sparc64/kernel/kprobes.c index bbd5aa6818ea..ff5e9d5cad50 100644 --- a/arch/sparc64/kernel/kprobes.c +++ b/arch/sparc64/kernel/kprobes.c | |||
@@ -61,10 +61,6 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
61 | flushi(p->addr); | 61 | flushi(p->addr); |
62 | } | 62 | } |
63 | 63 | ||
64 | void __kprobes arch_remove_kprobe(struct kprobe *p) | ||
65 | { | ||
66 | } | ||
67 | |||
68 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) | 64 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) |
69 | { | 65 | { |
70 | kcb->prev_kprobe.kp = kprobe_running(); | 66 | kcb->prev_kprobe.kp = kprobe_running(); |
diff --git a/arch/x86_64/kernel/kprobes.c b/arch/x86_64/kernel/kprobes.c index 128e18190f99..61a6a9369cbd 100644 --- a/arch/x86_64/kernel/kprobes.c +++ b/arch/x86_64/kernel/kprobes.c | |||
@@ -220,9 +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) | 223 | void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s) |
224 | { | 224 | { |
225 | down(s); | ||
225 | free_insn_slot(p->ainsn.insn); | 226 | free_insn_slot(p->ainsn.insn); |
227 | up(s); | ||
226 | } | 228 | } |
227 | 229 | ||
228 | 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 f9e150fa1d44..dc559267ce3e 100644 --- a/include/asm-i386/kprobes.h +++ b/include/asm-i386/kprobes.h | |||
@@ -40,6 +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 | 44 | ||
44 | void kretprobe_trampoline(void); | 45 | void kretprobe_trampoline(void); |
45 | 46 | ||
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h index 12a0b93020da..698508f4a0cf 100644 --- a/include/asm-ia64/kprobes.h +++ b/include/asm-ia64/kprobes.h | |||
@@ -89,6 +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 | 93 | ||
93 | typedef struct kprobe_opcode { | 94 | typedef struct kprobe_opcode { |
94 | bundle_t bundle; | 95 | bundle_t bundle; |
diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h index 42ece411435a..89dee13c2a4c 100644 --- a/include/asm-powerpc/kprobes.h +++ b/include/asm-powerpc/kprobes.h | |||
@@ -50,6 +50,7 @@ typedef unsigned int kprobe_opcode_t; | |||
50 | 50 | ||
51 | #define ARCH_SUPPORTS_KRETPROBES | 51 | #define ARCH_SUPPORTS_KRETPROBES |
52 | void kretprobe_trampoline(void); | 52 | void kretprobe_trampoline(void); |
53 | extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s); | ||
53 | 54 | ||
54 | /* Architecture specific copy of original instruction */ | 55 | /* Architecture specific copy of original instruction */ |
55 | struct arch_specific_insn { | 56 | struct arch_specific_insn { |
diff --git a/include/asm-sparc64/kprobes.h b/include/asm-sparc64/kprobes.h index 1b47e0d2ee93..27fbdcba724b 100644 --- a/include/asm-sparc64/kprobes.h +++ b/include/asm-sparc64/kprobes.h | |||
@@ -12,6 +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 | 16 | ||
16 | /* Architecture specific copy of original instruction*/ | 17 | /* Architecture specific copy of original instruction*/ |
17 | 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 9e2532adf42c..3a19ad179220 100644 --- a/include/asm-x86_64/kprobes.h +++ b/include/asm-x86_64/kprobes.h | |||
@@ -78,6 +78,7 @@ static inline void restore_interrupts(struct pt_regs *regs) | |||
78 | local_irq_enable(); | 78 | local_irq_enable(); |
79 | } | 79 | } |
80 | 80 | ||
81 | extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s); | ||
81 | extern int post_kprobe_handler(struct pt_regs *regs); | 82 | extern int post_kprobe_handler(struct pt_regs *regs); |
82 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); | 83 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); |
83 | extern int kprobe_handler(struct pt_regs *regs); | 84 | extern int kprobe_handler(struct pt_regs *regs); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index ad6e4fe970fd..59bf240cdb9d 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -152,7 +152,6 @@ extern spinlock_t kretprobe_lock; | |||
152 | extern int arch_prepare_kprobe(struct kprobe *p); | 152 | extern int arch_prepare_kprobe(struct kprobe *p); |
153 | extern void arch_arm_kprobe(struct kprobe *p); | 153 | extern void arch_arm_kprobe(struct kprobe *p); |
154 | extern void arch_disarm_kprobe(struct kprobe *p); | 154 | extern void arch_disarm_kprobe(struct kprobe *p); |
155 | extern void arch_remove_kprobe(struct kprobe *p); | ||
156 | extern int arch_init_kprobes(void); | 155 | extern int arch_init_kprobes(void); |
157 | extern void show_registers(struct pt_regs *regs); | 156 | extern void show_registers(struct pt_regs *regs); |
158 | extern kprobe_opcode_t *get_insn_slot(void); | 157 | extern kprobe_opcode_t *get_insn_slot(void); |
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index f1c0e61a2cb4..19c42cbf91a0 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
@@ -532,9 +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 | down(&kprobe_mutex); | 535 | arch_remove_kprobe(p, &kprobe_mutex); |
536 | arch_remove_kprobe(p); | ||
537 | up(&kprobe_mutex); | ||
538 | } | 536 | } |
539 | } | 537 | } |
540 | 538 | ||