[REFACTOR] new interface disarm_uprobe()
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Mon, 1 Apr 2013 08:55:10 +0000 (12:55 +0400)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Mon, 1 Apr 2013 08:55:10 +0000 (12:55 +0400)
-void disarm_uprobe(struct kprobe *p, struct task_struct *task);
+void disarm_uprobe(struct uprobe *p);

driver/sspt/sspt.h
uprobe/arch/asm-arm/swap_uprobes.c
uprobe/swap_uprobes.c
uprobe/swap_uprobes.h

index 4096f4e..ef72ad5 100644 (file)
@@ -111,7 +111,7 @@ static inline int unregister_usprobe_my(struct task_struct *task, struct us_ip *
                err = unregister_usprobe(task, ip, 1);
                break;
        case US_DISARM:
-               disarm_uprobe(&ip->jprobe.up.kp, task);
+               disarm_uprobe(&ip->jprobe.up);
                break;
        default:
                panic("incorrect value flag=%d", flag);
index 386b083..9054260 100644 (file)
@@ -660,7 +660,7 @@ static int check_validity_insn(struct uprobe *up, struct pt_regs *regs)
                        printk("Error in %s at %d: we are in thumb mode (!) and check instruction was fail \
                                (%0lX instruction at %p address)!\n", __FILE__, __LINE__, p->opcode, p->addr);
                        // Test case when we do our actions on already running application
-                       disarm_uprobe(p, up->task);
+                       disarm_uprobe(up);
                        return -1;
                }
        } else {
@@ -673,7 +673,7 @@ static int check_validity_insn(struct uprobe *up, struct pt_regs *regs)
                        printk("Error in %s at %d: we are in arm mode (!) and check instruction was fail \
                                (%0lX instruction at %p address)!\n", __FILE__, __LINE__, p->opcode, p->addr);
                        // Test case when we do our actions on already running application
-                       disarm_uprobe(p, up->task);
+                       disarm_uprobe(up);
                        return -1;
                }
        }
index ce7e00f..bd97dd6 100644 (file)
@@ -246,10 +246,13 @@ static void arm_uprobe(struct uprobe *p)
        }
 }
 
-void disarm_uprobe(struct kprobe *p, struct task_struct *task)
+void disarm_uprobe(struct uprobe *p)
 {
-       if (!write_proc_vm_atomic (task, (unsigned long) p->addr, &p->opcode, sizeof (p->opcode))) {
-               panic("disarm_uprobe: failed to write memory: tgid=%u, addr=%p!\n", task->tgid, p->addr);
+       int ret = write_proc_vm_atomic(p->task, (unsigned long)p->kp.addr,
+                                      &p->kp.opcode, sizeof(p->kp.opcode));
+       if (!ret) {
+               panic("disarm_uprobe: failed to write memory "
+                     "tgid=%u, addr=%p!\n", p->task->tgid, p->kp.addr);
        }
 }
 EXPORT_SYMBOL_GPL(disarm_uprobe);
@@ -601,7 +604,7 @@ valid_p:
        if ((old_p == p) || ((old_p->pre_handler == aggr_pre_uhandler) &&
            (p->list.next == &old_p->list) && (p->list.prev == &old_p->list))) {
                /* Only probe on the hash list */
-               disarm_uprobe(p, up->task);
+               disarm_uprobe(up);
                hlist_del_rcu(&old_p->hlist);
                cleanup_p = 1;
        } else {
index cafc9e1..ea63b78 100644 (file)
@@ -94,7 +94,7 @@ void dbi_unregister_all_uprobes(struct task_struct *task, int atomic);
 void dbi_uprobe_return(void);
 struct uprobe *get_uprobe(kprobe_opcode_t *addr, pid_t tgid);
 
-void disarm_uprobe(struct kprobe *p, struct task_struct *task);
+void disarm_uprobe(struct uprobe *p);
 
 int trampoline_uprobe_handler(struct kprobe *p, struct pt_regs *regs);