From: Vyacheslav Cherkashin Date: Thu, 12 May 2016 12:41:38 +0000 (+0300) Subject: [FIX] double call swap_unregister_kretprobe() X-Git-Tag: submit/tizen/20161124.145503~39^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05c4732f2afcf1c1b5d3d886ea773cc459c7b4f7;p=kernel%2Fswap-modules.git [FIX] double call swap_unregister_kretprobe() Change-Id: Ie785baec540d7226fa6969e89c0cb16511a7dd61 Signed-off-by: Vyacheslav Cherkashin --- diff --git a/loader/loader_module.c b/loader/loader_module.c index c5ab6b2..d305b96 100644 --- a/loader/loader_module.c +++ b/loader/loader_module.c @@ -403,18 +403,30 @@ static struct kretprobe mmap_rp = { .handler = mmap_ret_handler }; +static bool mmap_rp_inst = false; +static DEFINE_MUTEX(mmap_rp_mtx); + static void loader_start_cb(void) { int res; + mutex_lock(&mmap_rp_mtx); res = swap_register_kretprobe(&mmap_rp); if (res != 0) printk(KERN_ERR LOADER_PREFIX "Registering do_mmap_pgoff probe failed\n"); + else + mmap_rp_inst = true; + mutex_unlock(&mmap_rp_mtx); } static void loader_stop_cb(void) { - swap_unregister_kretprobe(&mmap_rp); + mutex_lock(&mmap_rp_mtx); + if (mmap_rp_inst) { + swap_unregister_kretprobe(&mmap_rp); + mmap_rp_inst = false; + } + mutex_unlock(&mmap_rp_mtx); } static unsigned long __not_loaded_entry(struct uretprobe_instance *ri, @@ -553,7 +565,13 @@ int loader_set(void) void loader_unset(void) { - swap_unregister_kretprobe(&mmap_rp); + mutex_lock(&mmap_rp_mtx); + if (mmap_rp_inst) { + swap_unregister_kretprobe(&mmap_rp); + mmap_rp_inst = false; + } + mutex_unlock(&mmap_rp_mtx); + /*module_put(THIS_MODULE);*/ loader_module_set_not_ready(); }