diff options
author | Evgeny Vereshchagin <evvers@ya.ru> | 2017-09-06 07:08:04 +0300 |
---|---|---|
committer | Martin Pitt <martinpitt@users.noreply.github.com> | 2017-09-06 06:08:04 +0200 |
commit | 48fa42d4ef1c4175c13203e27b2b458cb94fc42a (patch) | |
tree | bd68a81f2ab11566872e4c0188e408cf4d4868b3 /src/test/test-seccomp.c | |
parent | 6dd0e05c77284d86d181be002ac06130791332be (diff) | |
download | systemd-48fa42d4ef1c4175c13203e27b2b458cb94fc42a.tar.gz |
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.
Diffstat (limited to 'src/test/test-seccomp.c')
-rw-r--r-- | src/test/test-seccomp.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/test/test-seccomp.c b/src/test/test-seccomp.c index 0632361d45..30b87a8f24 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); |