On Wed, Feb 18, 2026 at 10:10:36AM -0800, Bobby Eshleman wrote:
From: Bobby Eshleman <[email protected]>

The child_ns_mode sysctl parameter becomes write-once in a future patch
in this series, which breaks existing tests. This patch updates the
tests to respect this new policy. No additional tests are added.

Add "global-parent" and "local-parent" namespaces as intermediaries to
spawn namespaces in the given modes. This avoids the need to change
"child_ns_mode" in the init_ns. nsenter must be used because ip netns
unshares the mount namespace so nested "ip netns add" breaks exec calls
from the init ns. Adds nsenter to the deps check.

Signed-off-by: Bobby Eshleman <[email protected]>
---
tools/testing/selftests/vsock/vmtest.sh | 35 +++++++++++++++------------------
1 file changed, 16 insertions(+), 19 deletions(-)

Reviewed-by: Stefano Garzarella <[email protected]>


diff --git a/tools/testing/selftests/vsock/vmtest.sh 
b/tools/testing/selftests/vsock/vmtest.sh
index dc8dbe74a6d0..e1e78b295e41 100755
--- a/tools/testing/selftests/vsock/vmtest.sh
+++ b/tools/testing/selftests/vsock/vmtest.sh
@@ -210,16 +210,17 @@ check_result() {
}

add_namespaces() {
-       local orig_mode
-       orig_mode=$(cat /proc/sys/net/vsock/child_ns_mode)
+       ip netns add "global-parent" 2>/dev/null
+       echo "global" | ip netns exec "global-parent" \
+               tee /proc/sys/net/vsock/child_ns_mode &>/dev/null
+       ip netns add "local-parent" 2>/dev/null
+       echo "local" | ip netns exec "local-parent" \
+               tee /proc/sys/net/vsock/child_ns_mode &>/dev/null

-       for mode in "${NS_MODES[@]}"; do
-               echo "${mode}" > /proc/sys/net/vsock/child_ns_mode
-               ip netns add "${mode}0" 2>/dev/null
-               ip netns add "${mode}1" 2>/dev/null
-       done
-
-       echo "${orig_mode}" > /proc/sys/net/vsock/child_ns_mode
+       nsenter --net=/var/run/netns/global-parent ip netns add "global0" 
2>/dev/null
+       nsenter --net=/var/run/netns/global-parent ip netns add "global1" 
2>/dev/null
+       nsenter --net=/var/run/netns/local-parent ip netns add "local0" 
2>/dev/null
+       nsenter --net=/var/run/netns/local-parent ip netns add "local1" 
2>/dev/null
}

init_namespaces() {
@@ -237,6 +238,8 @@ del_namespaces() {
                log_host "removed ns ${mode}0"
                log_host "removed ns ${mode}1"
        done
+       ip netns del "global-parent" &>/dev/null
+       ip netns del "local-parent" &>/dev/null
}

vm_ssh() {
@@ -287,7 +290,7 @@ check_args() {
}

check_deps() {
-       for dep in vng ${QEMU} busybox pkill ssh ss socat; do
+       for dep in vng ${QEMU} busybox pkill ssh ss socat nsenter; do
                if [[ ! -x $(command -v "${dep}") ]]; then
                        echo -e "skip:    dependency ${dep} not found!\n"
                        exit "${KSFT_SKIP}"
@@ -1231,12 +1234,8 @@ test_ns_local_same_cid_ok() {
}

test_ns_host_vsock_child_ns_mode_ok() {
-       local orig_mode
-       local rc
-
-       orig_mode=$(cat /proc/sys/net/vsock/child_ns_mode)
+       local rc="${KSFT_PASS}"

-       rc="${KSFT_PASS}"
        for mode in "${NS_MODES[@]}"; do
                local ns="${mode}0"

@@ -1246,15 +1245,13 @@ test_ns_host_vsock_child_ns_mode_ok() {
                        continue
                fi

-               if ! echo "${mode}" > /proc/sys/net/vsock/child_ns_mode; then
-                       log_host "child_ns_mode should be writable to ${mode}"
+               if ! echo "${mode}" | ip netns exec "${ns}" \
+                       tee /proc/sys/net/vsock/child_ns_mode &>/dev/null; then
                        rc="${KSFT_FAIL}"
                        continue
                fi
        done

-       echo "${orig_mode}" > /proc/sys/net/vsock/child_ns_mode
-
        return "${rc}"
}


--
2.47.3



Reply via email to