]> granicus.if.org Git - strace/commitdiff
Handle unlikely errors from personality syscall
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 27 Dec 2015 00:18:35 +0000 (00:18 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 27 Dec 2015 00:18:35 +0000 (00:18 +0000)
Despite being marked as SYSCALL_NEVER_FAILS, personality syscall still
might report a failure on some architectures due to obscure kernel
bugs.  Check for this unlikely case and let users know that their
kernel has gone bananas.

* personality.c (SYS_FUNC(personality)): Do not parse syscall return
value in case of syserror.

personality.c

index 02dc80f29807d10f8995fa3b7c5663b436336f5f..44ed5e3b21e88d767617577e2ff22cd28bd3a3bc 100644 (file)
@@ -50,6 +50,9 @@ SYS_FUNC(personality)
                return 0;
        }
 
+       if (syserror(tcp))
+               return 0;
+
        pers = tcp->u_rval;
        const char *type = xlookup(personality_types, pers & PER_MASK);
        char *p;