From 60ea192ceb1f66bccb905e147fe5bebc447133a7 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Wed, 28 Sep 2016 10:42:49 +0300 Subject: [PATCH] parasite: Remove struct pid from parasite_ctl Only real pid is used internally now. Signed-off-by: Pavel Emelyanov --- criu/arch/x86/crtools.c | 2 +- criu/cr-dump.c | 4 ++-- criu/include/parasite-syscall.h | 2 +- criu/parasite-syscall.c | 25 ++++++++++++------------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/criu/arch/x86/crtools.c b/criu/arch/x86/crtools.c index 73bf3b695..a0242cbe0 100644 --- a/criu/arch/x86/crtools.c +++ b/criu/arch/x86/crtools.c @@ -452,7 +452,7 @@ void *mmap_seized(struct parasite_ctl *ctl, if (IS_ERR_VALUE(map)) { if (map == -EACCES && (prot & PROT_WRITE) && (prot & PROT_EXEC)) pr_warn("mmap(PROT_WRITE | PROT_EXEC) failed for %d, " - "check selinux execmem policy\n", ctl->pid.real); + "check selinux execmem policy\n", ctl->rpid); return NULL; } diff --git a/criu/cr-dump.c b/criu/cr-dump.c index 37d2b30d0..eb66ecda8 100644 --- a/criu/cr-dump.c +++ b/criu/cr-dump.c @@ -1157,7 +1157,7 @@ static int pre_dump_one_task(struct pstree_item *item) goto err_cure; } - parasite_ctl->pid.virt = item->pid.virt = misc.pid; + item->pid.virt = misc.pid; mdc.pre_dump = true; @@ -1286,7 +1286,7 @@ static int dump_one_task(struct pstree_item *item) goto err_cure_imgset; } - parasite_ctl->pid.virt = item->pid.virt = misc.pid; + item->pid.virt = misc.pid; pstree_insert_pid(item->pid.virt, &item->pid); item->sid = misc.sid; item->pgid = misc.pgid; diff --git a/criu/include/parasite-syscall.h b/criu/include/parasite-syscall.h index e47682cf6..b9ac34772 100644 --- a/criu/include/parasite-syscall.h +++ b/criu/include/parasite-syscall.h @@ -28,7 +28,7 @@ struct thread_ctx { /* parasite control block */ struct parasite_ctl { - struct pid pid; + int rpid; /* Real pid of the victim */ void *remote_map; void *local_map; void *sigreturn_addr; /* A place for the breakpoint */ diff --git a/criu/parasite-syscall.c b/criu/parasite-syscall.c index fdc96e8c7..eba969e97 100644 --- a/criu/parasite-syscall.c +++ b/criu/parasite-syscall.c @@ -208,7 +208,7 @@ err: int __parasite_execute_syscall(struct parasite_ctl *ctl, user_regs_struct_t *regs, const char *code_syscall) { - pid_t pid = ctl->pid.real; + pid_t pid = ctl->rpid; int err; u8 code_orig[BUILTIN_SYSCALL_SIZE]; @@ -229,7 +229,7 @@ int __parasite_execute_syscall(struct parasite_ctl *ctl, if (ptrace_poke_area(pid, (void *)code_orig, (void *)ctl->syscall_ip, sizeof(code_orig))) { - pr_err("Can't restore syscall blob (pid: %d)\n", ctl->pid.real); + pr_err("Can't restore syscall blob (pid: %d)\n", ctl->rpid); err = -1; } @@ -495,7 +495,7 @@ static int accept_tsock(struct parasite_ctl *ctl) static int parasite_init_daemon(struct parasite_ctl *ctl, struct ns_id *net) { struct parasite_init_args *args; - pid_t pid = ctl->pid.real; + pid_t pid = ctl->rpid; user_regs_struct_t regs; struct ctl_msg m = { }; @@ -877,7 +877,7 @@ static bool task_in_parasite(struct parasite_ctl *ctl, user_regs_struct_t *regs) static int parasite_fini_seized(struct parasite_ctl *ctl) { - pid_t pid = ctl->pid.real; + pid_t pid = ctl->rpid; user_regs_struct_t regs; int status, ret = 0; enum trace_flags flag; @@ -1100,7 +1100,7 @@ int parasite_cure_local(struct parasite_ctl *ctl) if (ctl->local_map) { if (munmap(ctl->local_map, ctl->map_length)) { - pr_err("munmap failed (pid: %d)\n", ctl->pid.real); + pr_err("munmap failed (pid: %d)\n", ctl->rpid); ret = -1; } } @@ -1128,7 +1128,7 @@ int parasite_cure_seized(struct parasite_ctl *ctl) int parasite_unmap(struct parasite_ctl *ctl, unsigned long addr) { user_regs_struct_t regs = ctl->orig.regs; - pid_t pid = ctl->pid.real; + pid_t pid = ctl->rpid; int ret = -1; ret = parasite_run(pid, PTRACE_SYSCALL, addr, ctl->rstack, ®s, &ctl->orig); @@ -1165,8 +1165,7 @@ struct parasite_ctl *parasite_prep_ctl(pid_t pid, unsigned long exec_start) if (get_thread_ctx(pid, &ctl->orig)) goto err; - ctl->pid.real = pid; - ctl->pid.virt = 0; + ctl->rpid = pid; ctl->syscall_ip = exec_start; pr_debug("Parasite syscall_ip at %p\n", (void *)ctl->syscall_ip); @@ -1186,13 +1185,13 @@ static int parasite_mmap_exchange(struct parasite_ctl *ctl, unsigned long size) PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_SHARED, -1, 0); if (!ctl->remote_map) { - pr_err("Can't allocate memory for parasite blob (pid: %d)\n", ctl->pid.real); + pr_err("Can't allocate memory for parasite blob (pid: %d)\n", ctl->rpid); return -1; } ctl->map_length = round_up(size, page_size()); - fd = open_proc_rw(ctl->pid.real, "map_files/%p-%p", + fd = open_proc_rw(ctl->rpid, "map_files/%p-%p", ctl->remote_map, ctl->remote_map + ctl->map_length); if (fd < 0) return -1; @@ -1214,7 +1213,7 @@ static int parasite_memfd_exchange(struct parasite_ctl *ctl, unsigned long size) { void *where = (void *)ctl->syscall_ip + BUILTIN_SYSCALL_SIZE; u8 orig_code[MEMFD_FNAME_SZ] = MEMFD_FNAME; - pid_t pid = ctl->pid.real; + pid_t pid = ctl->rpid; unsigned long sret = -ENOSYS; int ret, fd, lfd; @@ -1249,7 +1248,7 @@ static int parasite_memfd_exchange(struct parasite_ctl *ctl, unsigned long size) return fd; ctl->map_length = round_up(size, page_size()); - lfd = open_proc_rw(ctl->pid.real, "fd/%d", fd); + lfd = open_proc_rw(ctl->rpid, "fd/%d", fd); if (lfd < 0) goto err_cure; @@ -1324,7 +1323,7 @@ void parasite_ensure_args_size(unsigned long sz) static int parasite_start_daemon(struct parasite_ctl *ctl, struct pstree_item *item) { - pid_t pid = ctl->pid.real; + pid_t pid = ctl->rpid; /* * Get task registers before going daemon, since the