From: наб Date: Tue, 3 Jun 2025 08:53:12 +0000 (+0200) Subject: sigaction: don't sign-extend sa_flags X-Git-Tag: glibc-2.42~174 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6945ce4a6f9700c2b978612c3538452ca1b126c6;p=thirdparty%2Fglibc.git sigaction: don't sign-extend sa_flags Before: rt_sigaction(SIGBUS, {sa_handler=0x55abb9960139, sa_mask=[], sa_flags=SA_RESTORER|SA_RESETHAND|SA_SIGINFO|0xffffffff00000000, sa_restorer=0x7fb1b2a82050}, NULL, 8) = 0 After: rt_sigaction(SIGBUS, {sa_handler=0x7f6a70dce139, sa_mask=[], sa_flags=SA_RESTORER|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x7f6a70c28f60}, NULL, 8) = 0 Signed-off-by: Ahelenia Ziemiańska Reviewed-by: Florian Weimer --- diff --git a/sysdeps/unix/sysv/linux/libc_sigaction.c b/sysdeps/unix/sysv/linux/libc_sigaction.c index bbfc177655..67dbc04aee 100644 --- a/sysdeps/unix/sysv/linux/libc_sigaction.c +++ b/sysdeps/unix/sysv/linux/libc_sigaction.c @@ -49,7 +49,7 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) { kact.k_sa_handler = act->sa_handler; memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags; + kact.sa_flags = (unsigned int) act->sa_flags; SET_SA_RESTORER (&kact, act); } diff --git a/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c b/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c index 006c532127..812e023584 100644 --- a/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c +++ b/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c @@ -22,7 +22,7 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; #define SET_SA_RESTORER(kact, act) \ - (kact)->sa_flags = (act)->sa_flags | SA_RESTORER; \ + (kact)->sa_flags |= SA_RESTORER; \ (kact)->sa_restorer = &restore_rt #define RESET_SA_RESTORER(act, kact) \