diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2024-02-26 16:58:02 -1000 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2024-02-29 08:48:02 -1000 |
commit | ccb6f3eee0f746961f95e9956fa20decd1f46da3 (patch) | |
tree | ff1fb2e82531e4fb80d1077a97ddd8ddafe333fc /linux-user/elfload.c | |
parent | 0af22a6abf8397f966701f120eee8a5bdf22ab19 (diff) | |
download | qemu-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.c | 12 |
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 */ |