diff options
Diffstat (limited to 'fs/binfmt_elf_fdpic.c')
-rw-r--r-- | fs/binfmt_elf_fdpic.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c index 645f6e56f378..fe2a643ee005 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c | |||
@@ -1561,6 +1561,8 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm) | |||
1561 | struct elf_shdr *shdr4extnum = NULL; | 1561 | struct elf_shdr *shdr4extnum = NULL; |
1562 | Elf_Half e_phnum; | 1562 | Elf_Half e_phnum; |
1563 | elf_addr_t e_shoff; | 1563 | elf_addr_t e_shoff; |
1564 | struct core_thread *ct; | ||
1565 | struct elf_thread_status *tmp; | ||
1564 | 1566 | ||
1565 | /* | 1567 | /* |
1566 | * We no longer stop all VM operations. | 1568 | * We no longer stop all VM operations. |
@@ -1596,28 +1598,23 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm) | |||
1596 | goto cleanup; | 1598 | goto cleanup; |
1597 | #endif | 1599 | #endif |
1598 | 1600 | ||
1599 | if (cprm->siginfo->si_signo) { | 1601 | for (ct = current->mm->core_state->dumper.next; |
1600 | struct core_thread *ct; | 1602 | ct; ct = ct->next) { |
1601 | struct elf_thread_status *tmp; | 1603 | tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); |
1602 | 1604 | if (!tmp) | |
1603 | for (ct = current->mm->core_state->dumper.next; | 1605 | goto cleanup; |
1604 | ct; ct = ct->next) { | ||
1605 | tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); | ||
1606 | if (!tmp) | ||
1607 | goto cleanup; | ||
1608 | 1606 | ||
1609 | tmp->thread = ct->task; | 1607 | tmp->thread = ct->task; |
1610 | list_add(&tmp->list, &thread_list); | 1608 | list_add(&tmp->list, &thread_list); |
1611 | } | 1609 | } |
1612 | 1610 | ||
1613 | list_for_each(t, &thread_list) { | 1611 | list_for_each(t, &thread_list) { |
1614 | struct elf_thread_status *tmp; | 1612 | struct elf_thread_status *tmp; |
1615 | int sz; | 1613 | int sz; |
1616 | 1614 | ||
1617 | tmp = list_entry(t, struct elf_thread_status, list); | 1615 | tmp = list_entry(t, struct elf_thread_status, list); |
1618 | sz = elf_dump_thread_status(cprm->siginfo->si_signo, tmp); | 1616 | sz = elf_dump_thread_status(cprm->siginfo->si_signo, tmp); |
1619 | thread_status_size += sz; | 1617 | thread_status_size += sz; |
1620 | } | ||
1621 | } | 1618 | } |
1622 | 1619 | ||
1623 | /* now collect the dump for the current */ | 1620 | /* now collect the dump for the current */ |