From 48fa42d4ef1c4175c13203e27b2b458cb94fc42a Mon Sep 17 00:00:00 2001 From: Evgeny Vereshchagin Date: Wed, 6 Sep 2017 07:08:04 +0300 Subject: [PATCH] tests: check the return value of personality when errno is not set (#6752) The `personality` wrapper might not set errno, so in that case the return value should be checked instead. For details, see https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=e0043e17dfc52fe1702746543127cb4a87232bcd. Closes #6737. --- src/test/test-seccomp.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/test/test-seccomp.c b/src/test/test-seccomp.c index 0632361..30b87a8 100644 --- a/src/test/test-seccomp.c +++ b/src/test/test-seccomp.c @@ -582,45 +582,59 @@ static void test_lock_personality(void) { assert_se(pid >= 0); if (pid == 0) { + int ret; + assert_se(seccomp_lock_personality(current) >= 0); assert_se((unsigned long) personality(current) == current); errno = EUCLEAN; - assert_se(personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -1 && errno == EPERM); + ret = personality(PER_LINUX | ADDR_NO_RANDOMIZE); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_LINUX | MMAP_PAGE_ZERO) == -1 && errno == EPERM); + ret = personality(PER_LINUX | MMAP_PAGE_ZERO); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_LINUX | ADDR_COMPAT_LAYOUT) == -1 && errno == EPERM); + ret = personality(PER_LINUX | ADDR_COMPAT_LAYOUT); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_LINUX | READ_IMPLIES_EXEC) == -1 && errno == EPERM); + ret = personality(PER_LINUX | READ_IMPLIES_EXEC); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_LINUX_32BIT) == -1 && errno == EPERM); + ret = personality(PER_LINUX_32BIT); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_SVR4) == -1 && errno == EPERM); + ret = personality(PER_SVR4); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_BSD) == -1 && errno == EPERM); + ret = personality(PER_BSD); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(current == PER_LINUX ? PER_LINUX32 : PER_LINUX) == -1 && errno == EPERM); + ret = personality(current == PER_LINUX ? PER_LINUX32 : PER_LINUX); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_LINUX32_3GB) == -1 && errno == EPERM); + ret = personality(PER_LINUX32_3GB); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PER_UW7) == -1 && errno == EPERM); + ret = personality(PER_UW7); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(0x42) == -1 && errno == EPERM); + ret = personality(0x42); + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); errno = EUCLEAN; - assert_se(personality(PERSONALITY_INVALID) == -1 && errno == EPERM); /* maybe remove this later */ + ret = personality(PERSONALITY_INVALID); /* maybe remove this later */ + assert_se((ret == -1 && errno == EPERM) || (ret == -EPERM && errno == EUCLEAN)); assert_se((unsigned long) personality(current) == current); _exit(EXIT_SUCCESS); -- 2.7.4