strerror() is not guaranteed to be thread-safe as described in (https://gitlab.com/qemu-project/qemu/-/issues/416).
This commit changes files under /linux-user that call strerror() to call the safer qemu_strerror(). Signed-off-by: Yohei Kojima <y-...@outlook.jp> --- linux-user/elfload.c | 4 ++-- linux-user/main.c | 4 ++-- linux-user/syscall.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 5928c14dfc..7eaafa8509 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2757,7 +2757,7 @@ static void pgb_reserved_va(const char *image_name, abi_ulong guest_loaddr, error_report("Unable to reserve 0x%lx bytes of virtual address " "space at %p (%s) for use as guest address space (check your " "virtual memory ulimit setting, min_mmap_addr or reserve less " - "using -R option)", reserved_va, test, strerror(errno)); + "using -R option)", reserved_va, test, qemu_strerror(errno)); exit(EXIT_FAILURE); } @@ -3550,7 +3550,7 @@ int load_elf_binary(struct linux_binprm *bprm, struct image_info *info) g_free(scratch); if (!bprm->p) { - fprintf(stderr, "%s: %s\n", bprm->filename, strerror(E2BIG)); + fprintf(stderr, "%s: %s\n", bprm->filename, qemu_strerror(E2BIG)); exit(-1); } diff --git a/linux-user/main.c b/linux-user/main.c index 75dbb52788..8be7ac489d 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -735,7 +735,7 @@ int main(int argc, char **argv, char **envp) if (execfd == 0) { execfd = open(exec_path, O_RDONLY); if (execfd < 0) { - printf("Error while loading %s: %s\n", exec_path, strerror(errno)); + printf("Error while loading %s: %s\n", exec_path, qemu_strerror(errno)); _exit(EXIT_FAILURE); } } @@ -873,7 +873,7 @@ int main(int argc, char **argv, char **envp) ret = loader_exec(execfd, exec_path, target_argv, target_environ, regs, info, &bprm); if (ret != 0) { - printf("Error while loading %s: %s\n", exec_path, strerror(-ret)); + printf("Error while loading %s: %s\n", exec_path, qemu_strerror(-ret)); _exit(EXIT_FAILURE); } diff --git a/linux-user/syscall.c b/linux-user/syscall.c index a6c426d73c..d25545c355 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -575,7 +575,7 @@ const char *target_strerror(int err) return "Successful exit from sigreturn"; } - return strerror(target_to_host_errno(err)); + return qemu_strerror(target_to_host_errno(err)); } static int check_zeroed_user(abi_long addr, size_t ksize, size_t usize) -- 2.39.2