aboutsummaryrefslogtreecommitdiffstats
path: root/fs/binfmt_elf_fdpic.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/binfmt_elf_fdpic.c')
-rw-r--r--fs/binfmt_elf_fdpic.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
index e49d9c06a4b6..6d6a16c5e9bb 100644
--- a/fs/binfmt_elf_fdpic.c
+++ b/fs/binfmt_elf_fdpic.c
@@ -1626,7 +1626,6 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
1626#endif 1626#endif
1627 int thread_status_size = 0; 1627 int thread_status_size = 0;
1628 elf_addr_t *auxv; 1628 elf_addr_t *auxv;
1629 unsigned long mm_flags;
1630 struct elf_phdr *phdr4note = NULL; 1629 struct elf_phdr *phdr4note = NULL;
1631 struct elf_shdr *shdr4extnum = NULL; 1630 struct elf_shdr *shdr4extnum = NULL;
1632 Elf_Half e_phnum; 1631 Elf_Half e_phnum;
@@ -1769,14 +1768,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
1769 /* Page-align dumped data */ 1768 /* Page-align dumped data */
1770 dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE); 1769 dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE);
1771 1770
1772 /* 1771 offset += elf_core_vma_data_size(cprm->mm_flags);
1773 * We must use the same mm->flags while dumping core to avoid
1774 * inconsistency between the program headers and bodies, otherwise an
1775 * unusable core file can be generated.
1776 */
1777 mm_flags = current->mm->flags;
1778
1779 offset += elf_core_vma_data_size(mm_flags);
1780 offset += elf_core_extra_data_size(); 1772 offset += elf_core_extra_data_size();
1781 e_shoff = offset; 1773 e_shoff = offset;
1782 1774
@@ -1809,7 +1801,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
1809 phdr.p_offset = offset; 1801 phdr.p_offset = offset;
1810 phdr.p_vaddr = vma->vm_start; 1802 phdr.p_vaddr = vma->vm_start;
1811 phdr.p_paddr = 0; 1803 phdr.p_paddr = 0;
1812 phdr.p_filesz = maydump(vma, mm_flags) ? sz : 0; 1804 phdr.p_filesz = maydump(vma, cprm->mm_flags) ? sz : 0;
1813 phdr.p_memsz = sz; 1805 phdr.p_memsz = sz;
1814 offset += phdr.p_filesz; 1806 offset += phdr.p_filesz;
1815 phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0; 1807 phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0;
@@ -1847,7 +1839,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
1847 goto end_coredump; 1839 goto end_coredump;
1848 1840
1849 if (elf_fdpic_dump_segments(cprm->file, &size, &cprm->limit, 1841 if (elf_fdpic_dump_segments(cprm->file, &size, &cprm->limit,
1850 mm_flags) < 0) 1842 cprm->mm_flags) < 0)
1851 goto end_coredump; 1843 goto end_coredump;
1852 1844
1853 if (!elf_core_write_extra_data(cprm->file, &size, cprm->limit)) 1845 if (!elf_core_write_extra_data(cprm->file, &size, cprm->limit))