]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
sigaction: don't sign-extend sa_flags
authorнаб <nabijaczleweli@nabijaczleweli.xyz>
Tue, 3 Jun 2025 08:53:12 +0000 (10:53 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 3 Jun 2025 08:53:12 +0000 (10:53 +0200)
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 <nabijaczleweli@nabijaczleweli.xyz>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
sysdeps/unix/sysv/linux/libc_sigaction.c
sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c

index bbfc1776553df3f8ef9605339eec986e24be6e79..67dbc04aeeec6f9da4e237cd3ee31b471dc533a5 100644 (file)
@@ -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);
     }
 
index 006c53212780cba348ff56f6b34d5edf8b6ee5cd..812e023584a5eac0b9f8712ca23b17cfc64830fa 100644 (file)
@@ -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)                   \