diff options
Diffstat (limited to 'fs/binfmt_elf_fdpic.c')
-rw-r--r-- | fs/binfmt_elf_fdpic.c | 14 |
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)) |