aboutsummaryrefslogtreecommitdiff
path: root/linux-user/elfload.c
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-02-26 16:58:02 -1000
committerRichard Henderson <richard.henderson@linaro.org>2024-02-29 08:48:02 -1000
commitccb6f3eee0f746961f95e9956fa20decd1f46da3 (patch)
treeff1fb2e82531e4fb80d1077a97ddd8ddafe333fc /linux-user/elfload.c
parent0af22a6abf8397f966701f120eee8a5bdf22ab19 (diff)
downloadqemu-ccb6f3eee0f746961f95e9956fa20decd1f46da3.zip
qemu-ccb6f3eee0f746961f95e9956fa20decd1f46da3.tar.gz
qemu-ccb6f3eee0f746961f95e9956fa20decd1f46da3.tar.bz2
linux-user/elfload: Latch errno before cleanup in elf_core_dump
On the off-chance that one of the cleanup functions changes errno, latch the errno that we want to return beforehand. Flush errno to 0 upon success, rather than at the beginning. No need to avoid negation of 0. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'linux-user/elfload.c')
-rw-r--r--linux-user/elfload.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 98b82b1..39d9ef9 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -4634,8 +4634,7 @@ static int elf_core_dump(int signr, const CPUArchState *env)
off_t offset = 0, data_offset = 0;
int segs = 0;
int fd = -1;
-
- errno = 0;
+ int ret;
if (prctl(PR_GET_DUMPABLE) == 0) {
return 0;
@@ -4755,15 +4754,14 @@ static int elf_core_dump(int signr, const CPUArchState *env)
goto out;
}
}
+ errno = 0;
out:
+ ret = -errno;
free_note_info(&info);
vma_delete(&mm);
- (void) close(fd);
-
- if (errno != 0)
- return (-errno);
- return (0);
+ close(fd);
+ return ret;
}
#endif /* USE_ELF_CORE_DUMP */