Commit 60ea192c authored by Pavel Emelyanov's avatar Pavel Emelyanov

parasite: Remove struct pid from parasite_ctl

Only real pid is used internally now.
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 524aeefd
...@@ -452,7 +452,7 @@ void *mmap_seized(struct parasite_ctl *ctl, ...@@ -452,7 +452,7 @@ void *mmap_seized(struct parasite_ctl *ctl,
if (IS_ERR_VALUE(map)) { if (IS_ERR_VALUE(map)) {
if (map == -EACCES && (prot & PROT_WRITE) && (prot & PROT_EXEC)) if (map == -EACCES && (prot & PROT_WRITE) && (prot & PROT_EXEC))
pr_warn("mmap(PROT_WRITE | PROT_EXEC) failed for %d, " 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; return NULL;
} }
......
...@@ -1157,7 +1157,7 @@ static int pre_dump_one_task(struct pstree_item *item) ...@@ -1157,7 +1157,7 @@ static int pre_dump_one_task(struct pstree_item *item)
goto err_cure; goto err_cure;
} }
parasite_ctl->pid.virt = item->pid.virt = misc.pid; item->pid.virt = misc.pid;
mdc.pre_dump = true; mdc.pre_dump = true;
...@@ -1286,7 +1286,7 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1286,7 +1286,7 @@ static int dump_one_task(struct pstree_item *item)
goto err_cure_imgset; 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); pstree_insert_pid(item->pid.virt, &item->pid);
item->sid = misc.sid; item->sid = misc.sid;
item->pgid = misc.pgid; item->pgid = misc.pgid;
......
...@@ -28,7 +28,7 @@ struct thread_ctx { ...@@ -28,7 +28,7 @@ struct thread_ctx {
/* parasite control block */ /* parasite control block */
struct parasite_ctl { struct parasite_ctl {
struct pid pid; int rpid; /* Real pid of the victim */
void *remote_map; void *remote_map;
void *local_map; void *local_map;
void *sigreturn_addr; /* A place for the breakpoint */ void *sigreturn_addr; /* A place for the breakpoint */
......
...@@ -208,7 +208,7 @@ err: ...@@ -208,7 +208,7 @@ err:
int __parasite_execute_syscall(struct parasite_ctl *ctl, int __parasite_execute_syscall(struct parasite_ctl *ctl,
user_regs_struct_t *regs, const char *code_syscall) user_regs_struct_t *regs, const char *code_syscall)
{ {
pid_t pid = ctl->pid.real; pid_t pid = ctl->rpid;
int err; int err;
u8 code_orig[BUILTIN_SYSCALL_SIZE]; u8 code_orig[BUILTIN_SYSCALL_SIZE];
...@@ -229,7 +229,7 @@ int __parasite_execute_syscall(struct parasite_ctl *ctl, ...@@ -229,7 +229,7 @@ int __parasite_execute_syscall(struct parasite_ctl *ctl,
if (ptrace_poke_area(pid, (void *)code_orig, if (ptrace_poke_area(pid, (void *)code_orig,
(void *)ctl->syscall_ip, sizeof(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; err = -1;
} }
...@@ -495,7 +495,7 @@ static int accept_tsock(struct parasite_ctl *ctl) ...@@ -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) static int parasite_init_daemon(struct parasite_ctl *ctl, struct ns_id *net)
{ {
struct parasite_init_args *args; struct parasite_init_args *args;
pid_t pid = ctl->pid.real; pid_t pid = ctl->rpid;
user_regs_struct_t regs; user_regs_struct_t regs;
struct ctl_msg m = { }; struct ctl_msg m = { };
...@@ -877,7 +877,7 @@ static bool task_in_parasite(struct parasite_ctl *ctl, user_regs_struct_t *regs) ...@@ -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) 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; user_regs_struct_t regs;
int status, ret = 0; int status, ret = 0;
enum trace_flags flag; enum trace_flags flag;
...@@ -1100,7 +1100,7 @@ int parasite_cure_local(struct parasite_ctl *ctl) ...@@ -1100,7 +1100,7 @@ int parasite_cure_local(struct parasite_ctl *ctl)
if (ctl->local_map) { if (ctl->local_map) {
if (munmap(ctl->local_map, ctl->map_length)) { 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; ret = -1;
} }
} }
...@@ -1128,7 +1128,7 @@ int parasite_cure_seized(struct parasite_ctl *ctl) ...@@ -1128,7 +1128,7 @@ int parasite_cure_seized(struct parasite_ctl *ctl)
int parasite_unmap(struct parasite_ctl *ctl, unsigned long addr) int parasite_unmap(struct parasite_ctl *ctl, unsigned long addr)
{ {
user_regs_struct_t regs = ctl->orig.regs; user_regs_struct_t regs = ctl->orig.regs;
pid_t pid = ctl->pid.real; pid_t pid = ctl->rpid;
int ret = -1; int ret = -1;
ret = parasite_run(pid, PTRACE_SYSCALL, addr, ctl->rstack, &regs, &ctl->orig); ret = parasite_run(pid, PTRACE_SYSCALL, addr, ctl->rstack, &regs, &ctl->orig);
...@@ -1165,8 +1165,7 @@ struct parasite_ctl *parasite_prep_ctl(pid_t pid, unsigned long exec_start) ...@@ -1165,8 +1165,7 @@ struct parasite_ctl *parasite_prep_ctl(pid_t pid, unsigned long exec_start)
if (get_thread_ctx(pid, &ctl->orig)) if (get_thread_ctx(pid, &ctl->orig))
goto err; goto err;
ctl->pid.real = pid; ctl->rpid = pid;
ctl->pid.virt = 0;
ctl->syscall_ip = exec_start; ctl->syscall_ip = exec_start;
pr_debug("Parasite syscall_ip at %p\n", (void *)ctl->syscall_ip); 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) ...@@ -1186,13 +1185,13 @@ static int parasite_mmap_exchange(struct parasite_ctl *ctl, unsigned long size)
PROT_READ | PROT_WRITE | PROT_EXEC, PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_ANONYMOUS | MAP_SHARED, -1, 0); MAP_ANONYMOUS | MAP_SHARED, -1, 0);
if (!ctl->remote_map) { 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; return -1;
} }
ctl->map_length = round_up(size, page_size()); 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); ctl->remote_map, ctl->remote_map + ctl->map_length);
if (fd < 0) if (fd < 0)
return -1; return -1;
...@@ -1214,7 +1213,7 @@ static int parasite_memfd_exchange(struct parasite_ctl *ctl, unsigned long size) ...@@ -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; void *where = (void *)ctl->syscall_ip + BUILTIN_SYSCALL_SIZE;
u8 orig_code[MEMFD_FNAME_SZ] = MEMFD_FNAME; u8 orig_code[MEMFD_FNAME_SZ] = MEMFD_FNAME;
pid_t pid = ctl->pid.real; pid_t pid = ctl->rpid;
unsigned long sret = -ENOSYS; unsigned long sret = -ENOSYS;
int ret, fd, lfd; int ret, fd, lfd;
...@@ -1249,7 +1248,7 @@ static int parasite_memfd_exchange(struct parasite_ctl *ctl, unsigned long size) ...@@ -1249,7 +1248,7 @@ static int parasite_memfd_exchange(struct parasite_ctl *ctl, unsigned long size)
return fd; return fd;
ctl->map_length = round_up(size, page_size()); 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) if (lfd < 0)
goto err_cure; goto err_cure;
...@@ -1324,7 +1323,7 @@ void parasite_ensure_args_size(unsigned long sz) ...@@ -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) 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 * Get task registers before going daemon, since the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment