linux-user/elfload: Open core file after vma_init

Swap the ordering of vma_init and open.  This will be necessary
for further changes, and adjusts the error cleanup path.  Narrow
the scope of corefile, as the variable can be freed immediately
after use in open().

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2024-02-26 17:03:19 -10:00
parent ccb6f3eee0
commit 106f8da664

View File

@ -4625,7 +4625,6 @@ static int elf_core_dump(int signr, const CPUArchState *env)
const CPUState *cpu = env_cpu((CPUArchState *)env); const CPUState *cpu = env_cpu((CPUArchState *)env);
const TaskState *ts = (const TaskState *)cpu->opaque; const TaskState *ts = (const TaskState *)cpu->opaque;
struct vm_area_struct *vma = NULL; struct vm_area_struct *vma = NULL;
g_autofree char *corefile = NULL;
struct elf_note_info info; struct elf_note_info info;
struct elfhdr elf; struct elfhdr elf;
struct elf_phdr phdr; struct elf_phdr phdr;
@ -4644,12 +4643,6 @@ static int elf_core_dump(int signr, const CPUArchState *env)
return 0; return 0;
} }
corefile = core_dump_filename(ts);
if ((fd = open(corefile, O_WRONLY | O_CREAT,
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0)
return (-errno);
/* /*
* Walk through target process memory mappings and * Walk through target process memory mappings and
* set up structure containing this information. After * set up structure containing this information. After
@ -4657,6 +4650,15 @@ static int elf_core_dump(int signr, const CPUArchState *env)
*/ */
vma_init(&mm); vma_init(&mm);
{
g_autofree char *corefile = core_dump_filename(ts);
fd = open(corefile, O_WRONLY | O_CREAT,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
}
if (fd < 0) {
goto out;
}
walk_memory_regions(&mm, vma_walker); walk_memory_regions(&mm, vma_walker);
segs = vma_get_mapping_count(&mm); segs = vma_get_mapping_count(&mm);