Commit 1aacdca5 authored by Pavel Emelyanov's avatar Pavel Emelyanov

parasite: Sanitize thread dumping code

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent f0891c05
...@@ -448,19 +448,19 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id, ...@@ -448,19 +448,19 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id,
struct parasite_dump_thread *args; struct parasite_dump_thread *args;
pid_t pid = tid->real; pid_t pid = tid->real;
user_regs_struct_t regs_orig; user_regs_struct_t regs_orig;
ThreadCoreEntry *tc = core->thread_core;
int ret; int ret;
BUG_ON(id == 0); /* Leader is dumped in dump_task_core_all */ BUG_ON(id == 0); /* Leader is dumped in dump_task_core_all */
args = parasite_args(ctl, struct parasite_dump_thread); args = parasite_args(ctl, struct parasite_dump_thread);
ret = ptrace(PTRACE_GETSIGMASK, pid, sizeof(k_rtsigset_t), ret = ptrace(PTRACE_GETSIGMASK, pid, sizeof(k_rtsigset_t), &tc->blk_sigset);
&core->thread_core->blk_sigset);
if (ret) { if (ret) {
pr_perror("ptrace can't get signal blocking mask for %d", pid); pr_perror("ptrace can't get signal blocking mask for %d", pid);
return -1; return -1;
} }
core->thread_core->has_blk_sigset = true; tc->has_blk_sigset = true;
ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig); ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig);
if (ret) { if (ret) {
...@@ -469,9 +469,8 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id, ...@@ -469,9 +469,8 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id,
} }
ret = parasite_execute_trap_by_pid(PARASITE_CMD_DUMP_THREAD, ctl, ret = parasite_execute_trap_by_pid(PARASITE_CMD_DUMP_THREAD, ctl,
pid, &regs_orig, pid, &regs_orig, ctl->r_thread_stack,
ctl->r_thread_stack, (k_rtsigset_t *)&tc->blk_sigset);
(k_rtsigset_t *) &core->thread_core->blk_sigset);
if (ret) { if (ret) {
pr_err("Can't init thread in parasite %d\n", pid); pr_err("Can't init thread in parasite %d\n", pid);
return -1; return -1;
...@@ -483,8 +482,8 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id, ...@@ -483,8 +482,8 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id,
return -1; return -1;
} }
BUG_ON(!core->thread_core->sas); BUG_ON(!tc->sas);
copy_sas(core->thread_core->sas, &args->sas); copy_sas(tc->sas, &args->sas);
CORE_THREAD_ARCH_INFO(core)->clear_tid_addr = encode_pointer(args->tid_addr); CORE_THREAD_ARCH_INFO(core)->clear_tid_addr = encode_pointer(args->tid_addr);
tid->virt = args->tid; tid->virt = args->tid;
......
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