summaryrefslogtreecommitdiff
path: root/src/test/test-seccomp.c
diff options
context:
space:
mode:
authorEvgeny Vereshchagin <evvers@ya.ru>2017-09-06 07:08:04 +0300
committerMartin Pitt <martinpitt@users.noreply.github.com>2017-09-06 06:08:04 +0200
commit48fa42d4ef1c4175c13203e27b2b458cb94fc42a (patch)
treebd68a81f2ab11566872e4c0188e408cf4d4868b3 /src/test/test-seccomp.c
parent6dd0e05c77284d86d181be002ac06130791332be (diff)
downloadsystemd-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.c38
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);