]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
tests/shell: mount all of "/var/run" in "test-wrapper.sh"
authorThomas Haller <thaller@redhat.com>
Fri, 6 Oct 2023 09:42:18 +0000 (11:42 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 10 Oct 2023 18:18:41 +0000 (20:18 +0200)
After reboot, "/var/run/netns" does not exist before we run the first
`ip netns add` command. Previously, "test-wrapper.sh" would mount a
tmpfs on that directory, but that fails, if the directory doesn't exist.
You will notice this, by deleting /var/run/netns (which only root can
delete or create, and which is wiped on reboot).

Instead, mount all of "/var/run". Then we can also create /var/run/netns
directory.

This means, any other content from /var/run is hidden too. That's
probably desirable, because it means we don't depend on stuff that
happens to be there. If we would require other content in /var/run, then
the test runner needs to be aware of the requirement and ensure it's
present. But best is just to not require anything. It's only iproute2
which insists on /var/run/netns.

Signed-off-by: Thomas Haller <thaller@redhat.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
tests/shell/helpers/test-wrapper.sh

index e10360c9b26648345e8ff8bb56b7b4a7b351a9b6..13b918f8b8e1e4672810684d8c36cfd4e722278a 100755 (executable)
@@ -23,11 +23,11 @@ START_TIME="$(cut -d ' ' -f1 /proc/uptime)"
 
 export TMPDIR="$NFT_TEST_TESTTMPDIR"
 
-CLEANUP_UMOUNT_RUN_NETNS=n
+CLEANUP_UMOUNT_VAR_RUN=n
 
 cleanup() {
-       if [ "$CLEANUP_UMOUNT_RUN_NETNS" = y ] ; then
-               umount "/var/run/netns" || :
+       if [ "$CLEANUP_UMOUNT_VAR_RUN" = y ] ; then
+               umount "/var/run" &>/dev/null || :
        fi
 }
 
@@ -38,16 +38,20 @@ printf '%s\n' "$TEST" > "$NFT_TEST_TESTTMPDIR/name"
 read tainted_before < /proc/sys/kernel/tainted
 
 if [ "$NFT_TEST_HAS_UNSHARED_MOUNT" = y ] ; then
-       # We have a private mount namespace. We will mount /run/netns as a tmpfs,
-       # this is useful because `ip netns add` wants to add files there.
+       # We have a private mount namespace. We will mount /var/run/ as a tmpfs.
        #
-       # When running as rootless, this is necessary to get such tests to
-       # pass.  When running rootful, it's still useful to not touch the
-       # "real" /var/run/netns of the system.
-       mkdir -p /var/run/netns
-       if mount -t tmpfs --make-private "/var/run/netns" ; then
-               CLEANUP_UMOUNT_RUN_NETNS=y
+       # The main purpose is so that we can create /var/run/netns, which is
+       # required for `ip netns add` to work.  When running as rootless, this
+       # is necessary to get such tests to pass. When running rootful, it's
+       # still useful to not touch the "real" /var/run/netns of the system.
+       #
+       # Note that this also hides everything that might reside in /var/run.
+       # That is desirable, as tests should not depend on content there (or if
+       # they do, we need to explicitly handle it as appropriate).
+       if mount -t tmpfs --make-private "/var/run" ; then
+               CLEANUP_UMOUNT_VAR_RUN=y
        fi
+       mkdir -p /var/run/netns
 fi
 
 TEST_TAGS_PARSED=0