]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: Assume we're running in a chroot if check fails
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 24 Nov 2025 12:07:39 +0000 (13:07 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 24 Nov 2025 12:09:41 +0000 (13:09 +0100)
running_in_chroot() will fail when a test is executed as a non-root
user without CAP_DAC_READ_SEARCH as it won't be able to access
/proc/1/root.

Let's make things more robust by skipping tests if we can't detect
if we're in a chroot or not, since if we can't even detect if we're
in a chroot or not, chances are we're missing the required privileges
to execute the test anyway.

src/test/test-execute.c
src/test/test-loop-block.c
src/test/test-mount-util.c
src/test/test-mountpoint-util.c
src/test/test-reread-partition-table.c

index d043521034915c76b11087a071f576244bbb7a3c..65908bc8fcd9438ce6d13665d945395c1798bd1d 100644 (file)
@@ -1612,7 +1612,7 @@ static int intro(void) {
         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0)
                 return log_tests_skipped("not privileged");
 
-        if (running_in_chroot() > 0)
+        if (running_in_chroot() != 0)
                 return log_tests_skipped("running in chroot");
 
         if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
index 144f898f3c7e0206321d81d9663cad34b808a341..76046f98ada19dc844c4daf53c499c4c9ce40a5c 100644 (file)
@@ -240,7 +240,7 @@ static int run(int argc, char *argv[]) {
         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0)
                 return log_tests_skipped("not running privileged");
 
-        if (detect_container() > 0 || running_in_chroot() > 0)
+        if (detect_container() != 0 || running_in_chroot() != 0)
                 return log_tests_skipped("Test not supported in a container/chroot, requires udev/uevent notifications");
 
         assert_se(loop_device_make(fd, O_RDWR, 0, UINT64_MAX, 0, LO_FLAGS_PARTSCAN, LOCK_EX, &loop) >= 0);
index 5d352a7df07788c2c0244eeb8ae087c198882958..7e40ca79ea39281190b998aad5849e8fd1c8ce49 100644 (file)
@@ -38,7 +38,7 @@
 #define CHECK_PRIV                                                      \
         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0)   \
                 return (void) log_tests_skipped("Not privileged");      \
-        if (running_in_chroot() > 0)                                    \
+        if (running_in_chroot() != 0)                                   \
                 return (void) log_tests_skipped("running in chroot");
 
 TEST(mount_option_mangle) {
index 04426365f89c5559c672362ef748aea2eb876e74..d4c830b4768708f18e75b261a2615f1728e5f6c7 100644 (file)
@@ -457,7 +457,7 @@ static int intro(void) {
         /* let's move into our own mount namespace with all propagation from the host turned off, so
          * that /proc/self/mountinfo is static and constant for the whole time our test runs. */
 
-        if (running_in_chroot() > 0) {
+        if (running_in_chroot() != 0) {
                 /* We cannot remount file system with MS_PRIVATE when running in chroot. */
                 log_notice("Running in chroot, proceeding in originating mount namespace.");
                 return EXIT_SUCCESS;
index c56e44d8efd61e77a3fbb6121799b5fa3fb63b31..33ab36c5f2c1cc6ce94717af9ef1f2b32720b952 100644 (file)
@@ -49,7 +49,7 @@ TEST(rereadpt) {
                 return (void) log_tests_skipped("test not available in container");
         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0)
                 return (void) log_tests_skipped("test requires privileges");
-        if (running_in_chroot() > 0)
+        if (running_in_chroot() != 0)
                 return (void) log_tests_skipped("test not available in chroot()");
 
         _cleanup_free_ char *sfdisk_path = NULL;