aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2015-12-27 00:18:35 +0000
committerDmitry V. Levin <ldv@altlinux.org>2015-12-27 00:18:35 +0000
commit0297e0c06788576fd1b86a0d533d6d7157ec7a03 (patch)
treed8ef5796ca3d9801a59f794b22843629a3b64aa4
parentabfa939f57247c9eaa1e8ab2f110495819a51617 (diff)
downloadstrace-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.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/personality.c b/personality.c
index 02dc80f2..44ed5e3b 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;