diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2015-12-27 00:18:35 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2015-12-27 00:18:35 +0000 |
commit | 0297e0c06788576fd1b86a0d533d6d7157ec7a03 (patch) | |
tree | d8ef5796ca3d9801a59f794b22843629a3b64aa4 | |
parent | abfa939f57247c9eaa1e8ab2f110495819a51617 (diff) | |
download | strace-0297e0c06788576fd1b86a0d533d6d7157ec7a03.tar.gz |
Handle unlikely errors from personality syscall
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.
-rw-r--r-- | personality.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/personality.c b/personality.c index 02dc80f29..44ed5e3b2 100644 --- a/personality.c +++ b/personality.c @@ -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; |