]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: check the return value of personality when errno is not set (#6752)
authorEvgeny Vereshchagin <evvers@ya.ru>
Wed, 6 Sep 2017 04:08:04 +0000 (07:08 +0300)
committerMartin Pitt <martinpitt@users.noreply.github.com>
Wed, 6 Sep 2017 04:08:04 +0000 (06:08 +0200)
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

index 0632361d45929ef5cc7e0c0268d84ed3104b63ef..30b87a8f24b905b8fdb28c6d28995840b80049a7 100644 (file)
@@ -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);