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);
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 {
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;
}
}
}
}
-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);
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 {
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);