summaryrefslogtreecommitdiff
path: root/uprobe
diff options
context:
space:
mode:
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>2015-07-15 15:29:09 +0300
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>2015-07-15 15:29:09 +0300
commitefce983cbcc5cc3ed9ccf00d931c66873a2d7e6b (patch)
treec826530199d2c20a1195d36146cc5c1b449b0108 /uprobe
parente877131ce52b59f1991b618611b602cfd0e12325 (diff)
downloadswap-modules-efce983cbcc5cc3ed9ccf00d931c66873a2d7e6b.tar.gz
swap-modules-efce983cbcc5cc3ed9ccf00d931c66873a2d7e6b.tar.bz2
swap-modules-efce983cbcc5cc3ed9ccf00d931c66873a2d7e6b.zip
[FIX] remove uprobe from hash table on error
Change-Id: I8f860004eb9b8c23c11a5e47899cfdb916529a64 Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
Diffstat (limited to 'uprobe')
-rw-r--r--uprobe/swap_uprobes.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/uprobe/swap_uprobes.c b/uprobe/swap_uprobes.c
index f9ad605c..da8274c5 100644
--- a/uprobe/swap_uprobes.c
+++ b/uprobe/swap_uprobes.c
@@ -528,8 +528,11 @@ int swap_register_uprobe(struct uprobe *up)
&uprobe_table[hash_ptr(p->addr, UPROBE_HASH_BITS)]);
ret = arm_uprobe(up);
- if (ret)
+ if (ret) {
+ hlist_del_rcu(&p->hlist);
+ synchronize_rcu();
remove_uprobe(up);
+ }
out:
DBPRINTF("out ret = 0x%x\n", ret);