diff --git a/[refs] b/[refs] index c648f8b23f49..9bcc6ab7c15a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0b9e2cac8a56e197d0a9e06268db4c8652d23dd5 +refs/heads/master: 04dea5f93231204cc3ca0ab793ce76dbb10c86ba diff --git a/trunk/kernel/kprobes.c b/trunk/kernel/kprobes.c index 1d5dd1337bd1..d8903e60c99a 100644 --- a/trunk/kernel/kprobes.c +++ b/trunk/kernel/kprobes.c @@ -107,13 +107,17 @@ int register_kprobe(struct kprobe *p) void unregister_kprobe(struct kprobe *p) { unsigned long flags; - arch_remove_kprobe(p); spin_lock_irqsave(&kprobe_lock, flags); + if (!get_kprobe(p->addr)) { + spin_unlock_irqrestore(&kprobe_lock, flags); + return; + } *p->addr = p->opcode; hlist_del(&p->hlist); flush_icache_range((unsigned long) p->addr, (unsigned long) p->addr + sizeof(kprobe_opcode_t)); spin_unlock_irqrestore(&kprobe_lock, flags); + arch_remove_kprobe(p); } static struct notifier_block kprobe_exceptions_nb = {