mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
fs/binfmt_elf.c: coredump: allocate core ELF header on stack
Comment says ELF header is "too large to be on stack". 64 bytes on 64-bit is not large by any means. Link: http://lkml.kernel.org/r/20191222143850.GA24341@avx2 Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
18676ffcee
commit
225a3f53e7
1 changed files with 5 additions and 11 deletions
|
@ -2186,7 +2186,7 @@ static int elf_core_dump(struct coredump_params *cprm)
|
||||||
int segs, i;
|
int segs, i;
|
||||||
size_t vma_data_size = 0;
|
size_t vma_data_size = 0;
|
||||||
struct vm_area_struct *vma, *gate_vma;
|
struct vm_area_struct *vma, *gate_vma;
|
||||||
struct elfhdr *elf = NULL;
|
struct elfhdr elf;
|
||||||
loff_t offset = 0, dataoff;
|
loff_t offset = 0, dataoff;
|
||||||
struct elf_note_info info = { };
|
struct elf_note_info info = { };
|
||||||
struct elf_phdr *phdr4note = NULL;
|
struct elf_phdr *phdr4note = NULL;
|
||||||
|
@ -2207,10 +2207,6 @@ static int elf_core_dump(struct coredump_params *cprm)
|
||||||
* exists while dumping the mm->vm_next areas to the core file.
|
* exists while dumping the mm->vm_next areas to the core file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* alloc memory for large data structures: too large to be on stack */
|
|
||||||
elf = kmalloc(sizeof(*elf), GFP_KERNEL);
|
|
||||||
if (!elf)
|
|
||||||
goto out;
|
|
||||||
/*
|
/*
|
||||||
* The number of segs are recored into ELF header as 16bit value.
|
* The number of segs are recored into ELF header as 16bit value.
|
||||||
* Please check DEFAULT_MAX_MAP_COUNT definition when you modify here.
|
* Please check DEFAULT_MAX_MAP_COUNT definition when you modify here.
|
||||||
|
@ -2234,7 +2230,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->siginfo, cprm->regs))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
has_dumped = 1;
|
has_dumped = 1;
|
||||||
|
@ -2242,7 +2238,7 @@ static int elf_core_dump(struct coredump_params *cprm)
|
||||||
fs = get_fs();
|
fs = get_fs();
|
||||||
set_fs(KERNEL_DS);
|
set_fs(KERNEL_DS);
|
||||||
|
|
||||||
offset += sizeof(*elf); /* Elf header */
|
offset += sizeof(elf); /* Elf header */
|
||||||
offset += segs * sizeof(struct elf_phdr); /* Program headers */
|
offset += segs * sizeof(struct elf_phdr); /* Program headers */
|
||||||
|
|
||||||
/* Write notes phdr entry */
|
/* Write notes phdr entry */
|
||||||
|
@ -2285,12 +2281,12 @@ static int elf_core_dump(struct coredump_params *cprm)
|
||||||
shdr4extnum = kmalloc(sizeof(*shdr4extnum), GFP_KERNEL);
|
shdr4extnum = kmalloc(sizeof(*shdr4extnum), GFP_KERNEL);
|
||||||
if (!shdr4extnum)
|
if (!shdr4extnum)
|
||||||
goto end_coredump;
|
goto end_coredump;
|
||||||
fill_extnum_info(elf, shdr4extnum, e_shoff, segs);
|
fill_extnum_info(&elf, shdr4extnum, e_shoff, segs);
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = dataoff;
|
offset = dataoff;
|
||||||
|
|
||||||
if (!dump_emit(cprm, elf, sizeof(*elf)))
|
if (!dump_emit(cprm, &elf, sizeof(elf)))
|
||||||
goto end_coredump;
|
goto end_coredump;
|
||||||
|
|
||||||
if (!dump_emit(cprm, phdr4note, sizeof(*phdr4note)))
|
if (!dump_emit(cprm, phdr4note, sizeof(*phdr4note)))
|
||||||
|
@ -2374,8 +2370,6 @@ cleanup:
|
||||||
kfree(shdr4extnum);
|
kfree(shdr4extnum);
|
||||||
kvfree(vma_filesz);
|
kvfree(vma_filesz);
|
||||||
kfree(phdr4note);
|
kfree(phdr4note);
|
||||||
kfree(elf);
|
|
||||||
out:
|
|
||||||
return has_dumped;
|
return has_dumped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue