Do not allow changes to the set of cpus and memory regions
while we are dumping core.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/elfload.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 16dd08a828..6f9da721d7 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -4537,13 +4537,11 @@ static void fill_note_info(struct elf_note_info *info,
}
/* read and fill status of all threads */
- WITH_QEMU_LOCK_GUARD(&qemu_cpu_list_lock) {
- CPU_FOREACH(cpu) {
- if (cpu == thread_cpu) {
- continue;
- }
- fill_thread_info(info, cpu_env(cpu));
+ CPU_FOREACH(cpu) {
+ if (cpu == thread_cpu) {
+ continue;
}
+ fill_thread_info(info, cpu_env(cpu));
}
}
@@ -4643,6 +4641,9 @@ static int elf_core_dump(int signr, const CPUArchState *env)
return 0;
}
+ cpu_list_lock();
+ mmap_lock();
+
/*
* Walk through target process memory mappings and
* set up structure containing this information. After
@@ -4760,6 +4761,8 @@ static int elf_core_dump(int signr, const CPUArchState *env)
out:
ret = -errno;
+ mmap_unlock();
+ cpu_list_unlock();
free_note_info(&info);
vma_delete(&mm);
close(fd);
--
2.34.1