From: Tiwei Bie <tiwei....@antgroup.com> We rely on errno to determine if a syscall has failed. However, the current signal handler may modify errno. Preserve errno within the signal handler to ensure it remains async-signal safe.
Signed-off-by: Tiwei Bie <tiwei....@antgroup.com> --- arch/um/os-Linux/signal.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index 11f07f498270..217a71244b69 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c @@ -201,8 +201,11 @@ static void hard_handler(int sig, siginfo_t *si, void *p) { ucontext_t *uc = p; mcontext_t *mc = &uc->uc_mcontext; + int errno_saved = errno; (*handlers[sig])(sig, (struct siginfo *)si, mc); + + errno = errno_saved; } void set_handler(int sig) -- 2.34.1