Commit 9ec7d323 authored by Eric W. Biederman's avatar Eric W. Biederman

coredump/elf: Pass coredump_params into fill_note_info

Instead of individually passing cprm->siginfo and cprm->regs
into fill_note_info pass all of struct coredump_params.

This is preparation to allow fill_files_note to use the existing
vma snapshot.
Reviewed-by: default avatarJann Horn <jannh@google.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 49c18663
...@@ -1822,7 +1822,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t, ...@@ -1822,7 +1822,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
static int fill_note_info(struct elfhdr *elf, int phdrs, static int fill_note_info(struct elfhdr *elf, int phdrs,
struct elf_note_info *info, struct elf_note_info *info,
const kernel_siginfo_t *siginfo, struct pt_regs *regs) struct coredump_params *cprm)
{ {
struct task_struct *dump_task = current; struct task_struct *dump_task = current;
const struct user_regset_view *view = task_user_regset_view(dump_task); const struct user_regset_view *view = task_user_regset_view(dump_task);
...@@ -1894,7 +1894,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs, ...@@ -1894,7 +1894,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
* Now fill in each thread's information. * Now fill in each thread's information.
*/ */
for (t = info->thread; t != NULL; t = t->next) for (t = info->thread; t != NULL; t = t->next)
if (!fill_thread_core_info(t, view, siginfo->si_signo, &info->size)) if (!fill_thread_core_info(t, view, cprm->siginfo->si_signo, &info->size))
return 0; return 0;
/* /*
...@@ -1903,7 +1903,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs, ...@@ -1903,7 +1903,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
fill_psinfo(psinfo, dump_task->group_leader, dump_task->mm); fill_psinfo(psinfo, dump_task->group_leader, dump_task->mm);
info->size += notesize(&info->psinfo); info->size += notesize(&info->psinfo);
fill_siginfo_note(&info->signote, &info->csigdata, siginfo); fill_siginfo_note(&info->signote, &info->csigdata, cprm->siginfo);
info->size += notesize(&info->signote); info->size += notesize(&info->signote);
fill_auxv_note(&info->auxv, current->mm); fill_auxv_note(&info->auxv, current->mm);
...@@ -2051,7 +2051,7 @@ static int elf_note_info_init(struct elf_note_info *info) ...@@ -2051,7 +2051,7 @@ static int elf_note_info_init(struct elf_note_info *info)
static int fill_note_info(struct elfhdr *elf, int phdrs, static int fill_note_info(struct elfhdr *elf, int phdrs,
struct elf_note_info *info, struct elf_note_info *info,
const kernel_siginfo_t *siginfo, struct pt_regs *regs) struct coredump_params *cprm)
{ {
struct core_thread *ct; struct core_thread *ct;
struct elf_thread_status *ets; struct elf_thread_status *ets;
...@@ -2072,13 +2072,13 @@ static int fill_note_info(struct elfhdr *elf, int phdrs, ...@@ -2072,13 +2072,13 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
list_for_each_entry(ets, &info->thread_list, list) { list_for_each_entry(ets, &info->thread_list, list) {
int sz; int sz;
sz = elf_dump_thread_status(siginfo->si_signo, ets); sz = elf_dump_thread_status(cprm->siginfo->si_signo, ets);
info->thread_status_size += sz; info->thread_status_size += sz;
} }
/* now collect the dump for the current */ /* now collect the dump for the current */
memset(info->prstatus, 0, sizeof(*info->prstatus)); memset(info->prstatus, 0, sizeof(*info->prstatus));
fill_prstatus(&info->prstatus->common, current, siginfo->si_signo); fill_prstatus(&info->prstatus->common, current, cprm->siginfo->si_signo);
elf_core_copy_regs(&info->prstatus->pr_reg, regs); elf_core_copy_regs(&info->prstatus->pr_reg, cprm->regs);
/* Set up header */ /* Set up header */
fill_elf_header(elf, phdrs, ELF_ARCH, ELF_CORE_EFLAGS); fill_elf_header(elf, phdrs, ELF_ARCH, ELF_CORE_EFLAGS);
...@@ -2094,7 +2094,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs, ...@@ -2094,7 +2094,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
fill_note(info->notes + 1, "CORE", NT_PRPSINFO, fill_note(info->notes + 1, "CORE", NT_PRPSINFO,
sizeof(*info->psinfo), info->psinfo); sizeof(*info->psinfo), info->psinfo);
fill_siginfo_note(info->notes + 2, &info->csigdata, siginfo); fill_siginfo_note(info->notes + 2, &info->csigdata, cprm->siginfo);
fill_auxv_note(info->notes + 3, current->mm); fill_auxv_note(info->notes + 3, current->mm);
info->numnote = 4; info->numnote = 4;
...@@ -2104,8 +2104,8 @@ static int fill_note_info(struct elfhdr *elf, int phdrs, ...@@ -2104,8 +2104,8 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
} }
/* Try to dump the FPU. */ /* Try to dump the FPU. */
info->prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs, info->prstatus->pr_fpvalid =
info->fpu); elf_core_copy_task_fpregs(current, cprm->regs, info->fpu);
if (info->prstatus->pr_fpvalid) if (info->prstatus->pr_fpvalid)
fill_note(info->notes + info->numnote++, fill_note(info->notes + info->numnote++,
"CORE", NT_PRFPREG, sizeof(*info->fpu), info->fpu); "CORE", NT_PRFPREG, sizeof(*info->fpu), info->fpu);
...@@ -2218,7 +2218,7 @@ static int elf_core_dump(struct coredump_params *cprm) ...@@ -2218,7 +2218,7 @@ static int elf_core_dump(struct coredump_params *cprm)
* Collect all the non-memory information about the process for the * Collect all the non-memory information about the process for the
* notes. This also sets up the file header. * notes. This also sets up the file header.
*/ */
if (!fill_note_info(&elf, e_phnum, &info, cprm->siginfo, cprm->regs)) if (!fill_note_info(&elf, e_phnum, &info, cprm))
goto end_coredump; goto end_coredump;
has_dumped = 1; has_dumped = 1;
......
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