static int parasite_start_daemon(struct parasite_ctl *ctl) { pid_t pid = ctl->rpid; struct infect_ctx *ictx = &ctl->ictx; /* * Get task registers before going daemon, since the * compel_get_task_regs needs to call ptrace on _stopped_ task, * while in daemon it is not such. */ if (get_task_regs(pid, &ctl->orig.regs, ictx->save_regs, ictx->regs_arg, ictx->flags)) { pr_err("Can't obtain regs for thread %d\n", pid); return -1; } if (ictx->make_sigframe(ictx->regs_arg, ctl->sigframe, ctl->rsigframe, &ctl->orig.sigmask)) return -1; if (parasite_init_daemon(ctl)) return -1; return 0; }
int compel_get_thread_regs(struct parasite_thread_ctl *tctl, save_regs_t save, void * arg) { return get_task_regs(tctl->tid, &tctl->th.regs, save, arg); }