]> granicus.if.org Git - strace/commitdiff
Fix compat decoding of struct sigaction.sa_mask on big endian architectures
authorDmitry V. Levin <ldv@altlinux.org>
Sat, 20 Aug 2016 00:08:10 +0000 (00:08 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sat, 20 Aug 2016 00:08:10 +0000 (00:08 +0000)
* signal.c (decode_new_sigaction) [SUPPORTED_PERSONALITIES > 1 &&
SIZEOF_LONG > 4]: Use LONG_LONG to convert sa_mask from 32-bit
struct sigaction to 64-bit struct sigaction.

signal.c

index cb200bfd2eeb25987ba49047e1b8814d86bec707..5b530cf4eb7f72e1d175b96f3fca30bde4c9c7da 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -545,7 +545,7 @@ decode_new_sigaction(struct tcb *tcp, long addr)
                 * For little-endian, it's the same.
                 * For big-endian, we swap 32-bit words.
                 */
-               sa.sa_mask[0] = sa32.sa_mask[0] + ((long)(sa32.sa_mask[1]) << 32);
+               sa.sa_mask[0] = LONG_LONG(sa32.sa_mask[0], sa32.sa_mask[1]);
        } else
 #endif
        if (umove_or_printaddr(tcp, addr, &sa))