From 0c7cf421e96e15cc01ca968e42a9d58860323a91 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Wed, 27 Feb 2013 15:44:03 +0400 Subject: [PATCH] add 'synchronize_sched' in func 'dbi_unregister_kprobe' --- driver/probes_manager.c | 4 ++-- kprobe/dbi_kprobes.c | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/driver/probes_manager.c b/driver/probes_manager.c index cb17ac5..9d3df69 100644 --- a/driver/probes_manager.c +++ b/driver/probes_manager.c @@ -177,8 +177,8 @@ register_kernel_probe (kernel_probe_t * probe) int unregister_kernel_probe (kernel_probe_t * probe) { - unregister_kernel_jprobe (probe); - unregister_kernel_retprobe (probe); + unregister_kernel_retprobe(probe); + unregister_kernel_jprobe(probe); return 0; } diff --git a/kprobe/dbi_kprobes.c b/kprobe/dbi_kprobes.c index 55410cc..1454b41 100644 --- a/kprobe/dbi_kprobes.c +++ b/kprobe/dbi_kprobes.c @@ -81,7 +81,6 @@ static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE]; atomic_t kprobe_count; - void kretprobe_assert (struct kretprobe_instance *ri, unsigned long orig_ret_address, unsigned long trampoline_address) { if (!orig_ret_address || (orig_ret_address == trampoline_address)) { @@ -591,6 +590,11 @@ valid_p: list_del_rcu (&p->list); kfree (old_p); } + + if (!in_atomic()) { + synchronize_sched(); + } + arch_remove_kprobe (p, task); } else -- 2.7.4