[CRIU] [PATCH 2/2] compel: Add compel_run_at helper
Cyrill Gorcunov
gorcunov at openvz.org
Mon Dec 5 13:15:08 PST 2016
Simply run tracee from specfied IP assuming
it's arelady have trapping instruction in
stream.
It's unsafe low-level function use with caution.
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
compel/include/uapi/infect.h | 1 +
compel/src/lib/infect.c | 11 +++++++++++
2 files changed, 12 insertions(+)
diff --git a/compel/include/uapi/infect.h b/compel/include/uapi/infect.h
index 174c197bba1c..7b88a5634c5e 100644
--- a/compel/include/uapi/infect.h
+++ b/compel/include/uapi/infect.h
@@ -73,6 +73,7 @@ extern int compel_syscall(struct parasite_ctl *ctl, int nr, unsigned long *ret,
unsigned long arg5,
unsigned long arg6);
extern int compel_run_in_thread(struct parasite_thread_ctl *tctl, unsigned int cmd);
+extern int compel_run_at(struct parasite_ctl *ctl, unsigned long ip, user_regs_struct_t *ret_regs);
/*
* The PTRACE_SYSCALL will trap task twice -- on
diff --git a/compel/src/lib/infect.c b/compel/src/lib/infect.c
index fd92ee5d1da6..72cf20cdcba1 100644
--- a/compel/src/lib/infect.c
+++ b/compel/src/lib/infect.c
@@ -590,6 +590,17 @@ int compel_execute_syscall(struct parasite_ctl *ctl,
return err;
}
+int compel_run_at(struct parasite_ctl *ctl, unsigned long ip, user_regs_struct_t *ret_regs)
+{
+ user_regs_struct_t regs = ctl->orig.regs;
+ int ret;
+
+ ret = parasite_run(ctl->rpid, PTRACE_CONT, ip, 0, ®s, &ctl->orig);
+ if (!ret)
+ ret = parasite_trap(ctl, ctl->rpid, ret_regs ? ret_regs : ®s, &ctl->orig);
+ return ret;
+}
+
static int accept_tsock(struct parasite_ctl *ctl)
{
int sock;
--
2.7.4
More information about the CRIU
mailing list