module_name = swap_driver
cross_compiler = $(subst gcc,,$(CC))
-inlude_opt = -I$(realpath $(top_srcdir)/src/modules/ksyms) -I$(realpath $(top_srcdir)/src/common) -I$(realpath $(top_srcdir)/src/profile) -I$(realpath $(top_srcdir)/src/modules/kprobe)
+inlude_opt = -I$(realpath $(top_srcdir)/src/modules/ksyms) -I$(realpath $(top_srcdir)/src/common) \
+ -I$(realpath $(top_srcdir)/src/profile) -I$(realpath $(top_srcdir)/src/modules/kprobe) \
+ -I$(realpath $(top_srcdir)/src/modules/uprobe)
extra_cflags = "$(inlude_opt) -DEC_ARCH_$(ARCH) -D__DEBUG $(memchecker) $(debug_opt) $(android_opt) $(slp_opt) $(android_app_opt) $(board_opt)"
#bin_SCRIPTS = patchko.sh insmod.sh
#include "sspt_procs.h"
#include "sspt_debug.h"
#include "../us_proc_inst.h"
+#include <swap_uprobes.h>
#include "../storage.h"
err = unregister_usprobe(task, ip, 1, 1);
break;
case US_DISARM:
- arch_disarm_uprobe(&ip->jprobe.kp, task);
+ disarm_uprobe(&ip->jprobe.kp, task);
break;
default:
panic("incorrect value flag=%d", flag);
}
EXPORT_SYMBOL_GPL(arch_remove_uprobe);
-void arch_disarm_uprobe (struct kprobe *p, struct task_struct *tsk)
-{
- if (!write_proc_vm_atomic (tsk, (unsigned long) p->addr, &p->opcode, sizeof (p->opcode))) {
- panic ("failed to write memory: tgid=%u, addr=%p!\n", tsk->tgid, p->addr);
- }
-}
-EXPORT_SYMBOL_GPL(arch_disarm_uprobe);
-
int arch_init_module_dependencies(void)
{
int ret;
extern int arch_prepare_kretprobe (struct kretprobe *p);
extern void arch_arm_kprobe (struct kprobe *p);
extern void arch_disarm_kprobe (struct kprobe *p);
-extern void arch_disarm_uprobe (struct kprobe *p, struct task_struct *tsk);
extern int arch_init_kprobes (void);
extern void dbi_arch_exit_kprobes (void);
extern int patch_suspended_task(struct kretprobe *rp, struct task_struct *tsk);
(p->list.next == &old_p->list) && (p->list.prev == &old_p->list)))
{
/* Only probe on the hash list */
- DBPRINTF ("dbi_unregister_kprobe disarm pid=%d", pid);
- if (pid)
- arch_disarm_uprobe (p, task);//vma, page, kaddr);
- else
- arch_disarm_kprobe (p);
+ arch_disarm_kprobe(p);
hlist_del_rcu (&old_p->hlist);
cleanup_p = 1;
}
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
- arch_disarm_uprobe(p, task);
+ disarm_uprobe(p, task);
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
- arch_disarm_uprobe(p, task);
+ disarm_uprobe(p, task);
return -1;
}
}
}
}
+void disarm_uprobe(struct kprobe *p, struct task_struct *task)
+{
+ 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);
+ }
+}
+EXPORT_SYMBOL_GPL(disarm_uprobe);
+
static void init_uprobes_insn_slots(void)
{
int i;
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 */
- arch_disarm_uprobe(p, task);
+ disarm_uprobe(p, task);
hlist_del_rcu(&old_p->hlist);
cleanup_p = 1;
} else {
} else {
DBPRINTF ("initiating deferred retprobe deletion addr %p", rp->kp.addr);
printk ("initiating deferred retprobe deletion addr %p\n", rp->kp.addr);
- arch_disarm_uprobe(&rp->kp, task);
+ disarm_uprobe(&rp->kp, task);
rp2->disarm = 1;
}
/*
void dbi_uprobe_return(void);
struct kprobe *get_uprobe(kprobe_opcode_t *addr, pid_t tgid);
+void disarm_uprobe(struct kprobe *p, struct task_struct *task);
+
#endif /* _DBI_UPROBES_H */