From nobody Mon Feb 9 12:42:59 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F69F2F616A for ; Tue, 21 Oct 2025 23:47:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761090449; cv=none; b=al9Cwif5hsGQM6Xru2n7oLNYaU1FCwL4ewW1aKH+mD5D9gSlD9TGWQE6TBAEozZhyOBfkDsc76D8VvccyD9900vFYWjmgOjXugjf7pGhs5cH+bBY63MDGHCFBruIQeuzT2A7shg2C7/v5iUpDa5vJMJP44od0t3TAEHpBA6nuns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761090449; c=relaxed/simple; bh=iuoFGVXiyma5BjD4qVBCYGN/H+01qwexZAVvYObUk/o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pJ8RrkU0Sr/KvG4kk/8HvpRmDDUEvh2GenTZ7/IINK/QC2vlUm8kgJZISnVNHjRSnIZtirMCwDIAMRahilDNR8JUIvA/PtZ1czNocV4QRe21lOwfCoB3edKSJZxZ8iPgy1/PXIFJuT8+FfiaT8DIlM8NVVTtD2/9qpqpedKf0PM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Sc58K/oT; arc=none smtp.client-ip=209.85.215.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Sc58K/oT" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-b608df6d2a0so5514184a12.1 for ; Tue, 21 Oct 2025 16:47:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761090442; x=1761695242; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=R1mW3ek33KlnkdGQnSq6JCzqGkY1/dpZqhI7Q32Dbqk=; b=Sc58K/oT1ajqI8x8bqgh3ED3viK1T4F36SaocNpGzZ06GQmwWhEy3kpqzbU0kgY2k7 JGobMSXi37TLtpt2iQP/LgSUcFb1RwwbjoDugvqIsCf1NKebLYyVGuO+a8q5zwv7cQNT 9PUL6QGMeljoMSB6vDJYR/thxHSwE9bS7fEJnK2VEI4q7KtTAXzuJ21b8f1nL+lIYeq6 FShbWzc8RcSR21YIRG99Nzof0bCOM4tYUPY3UtwQ4ANxzdbqJ29yizAYDLFOIhWTKUbL GiR1J/RfD9uFpKvXAi7ucI0/i4szU3Ksea2zSo7bW26v2ExxtpAKSSMPxlRXDM+TwawD AAIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761090442; x=1761695242; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=R1mW3ek33KlnkdGQnSq6JCzqGkY1/dpZqhI7Q32Dbqk=; b=atPwXAXBDk3VhwTIeJnZIOPwJflsFFwBjwS7osAw2GtZAE6+NuZyHt4xGUbI4PQqM6 YBzi/uJPpDhIctJxMxuZutafFynVWJp+xyIBUsXAVXrBzRjiUUCNmScIuwNps6ypC8DF 6A5u6VzlJ6HlXTzjguIqXjkA4a1y2wFHRlDNWWgwKJwYHlpdSyDBLXNwjNSOkla5bW9N Wuhu5qVPj0YYLKaddBH7t7BLJ4q4qpnypwkY/5KfOLuzKwgL205Oo+E7nuozfVS1rKki +lBG1Ij0emujvXhkr7OmOzJKmNsKEE6q2Q15h0FLZOO8iuUm2DJljooLxiuS2X3yyHnm 6xww== X-Forwarded-Encrypted: i=1; AJvYcCXOaDZP1z6yWGkGm3CG290T+uNdj93xU/E8ke+ueG8QvHfZPtr+0nSfGMR9r13mqNS7TtDTH5j1iIUKAMA=@vger.kernel.org X-Gm-Message-State: AOJu0YyqjTsGtD8NynO9xrfINlGbLzjtiC2/eXfpLyBwLRIuAKfoRVis 2Le8vcKsLFiuRXdR65nxEgBCeoRyQ/r57xa+lXpamz6a4BPJfLJnmePB6i+iP8Nn X-Gm-Gg: ASbGnctCHfl4GcaPldE8MV5r4xYPxiZHrh9SJkAqEWNXDhVfV90i95ELvsdjfvehBUC GS9Pz5KJzE3GufDBKprkcIirP4e8g/8AYT5SX342bLMki7LCCdZ0XEuV648516dqxPf/GEK7EvT iyE0nCsTZPD2JQ1InEQhC7acZUYIei1Q6x3ATUlPkEYhLnrPN7fZWiNc9OJL7bAN4im8mof1gCv IvZxUTpOGWVewTI761Y3TwL93rnFZpXNBFxOESJOPkNw+J97Lm29YotZhWCZhSclvFU6M9FxHOM mewD6U3jQdQJthygK1E7jVOevPf/aTmkdj1cp/Z6c0Tsrq+hdu9QHN10IOvC8Kvh0hjr/xz0ezm 3nJt8p7daFKQ1EVxsszHndkP7XSrouCARbvHvmO3WhM9OeYC9BFtXLudHLprk24SzJoiEmtTObQ == X-Google-Smtp-Source: AGHT+IEnoXliC4DZTHE40VZWQCvx9ip3e2WPqCXD2akJhvJXh22fPmIW6LK7Ka+Qk8/lrzwfhc3o6g== X-Received: by 2002:a17:902:d58d:b0:269:9719:fffd with SMTP id d9443c01a7336-290c9cf9775mr231885445ad.1.1761090442484; Tue, 21 Oct 2025 16:47:22 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:74::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29246fd8dfasm120381925ad.43.2025.10.21.16.47.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Oct 2025 16:47:22 -0700 (PDT) From: Bobby Eshleman Date: Tue, 21 Oct 2025 16:47:08 -0700 Subject: [PATCH net-next v7 25/26] selftests/vsock: add tests for module loading order Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251021-vsock-vmtest-v7-25-0661b7b6f081@meta.com> References: <20251021-vsock-vmtest-v7-0-0661b7b6f081@meta.com> In-Reply-To: <20251021-vsock-vmtest-v7-0-0661b7b6f081@meta.com> To: Stefano Garzarella , Shuah Khan , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Stefan Hajnoczi , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?utf-8?q?Eugenio_P=C3=A9rez?= , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Bryan Tan , Vishnu Dasa , Broadcom internal kernel review list , Bobby Eshleman Cc: virtualization@lists.linux.dev, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add tests to check that module loading order does not break vsock_loopback. Because vsock_loopback has some per-namespace data structure initialization that affects vsock namespace modes, lets make sure that namespace modes are respected and loopback sockets are functional even when the namespaces and modes are set prior to loading the vsock_loopback module. Signed-off-by: Bobby Eshleman --- tools/testing/selftests/vsock/vmtest.sh | 131 ++++++++++++++++++++++++++++= ++++ 1 file changed, 131 insertions(+) diff --git a/tools/testing/selftests/vsock/vmtest.sh b/tools/testing/selfte= sts/vsock/vmtest.sh index f8fa8b16d6e3..648ae71bf45a 100755 --- a/tools/testing/selftests/vsock/vmtest.sh +++ b/tools/testing/selftests/vsock/vmtest.sh @@ -68,6 +68,8 @@ readonly TEST_NAMES=3D( ns_delete_vm_ok ns_delete_host_ok ns_delete_both_ok + ns_loopback_global_global_late_module_load_ok + ns_loopback_local_local_late_module_load_fails ) readonly TEST_DESCS=3D( # vm_server_host_client @@ -153,6 +155,12 @@ readonly TEST_DESCS=3D( =20 # ns_delete_both_ok "Check that deleting the VM and host's namespaces does not break the sock= et connection" + + # ns_loopback_global_global_late_module_load_ok + "Test that loopback still works in global namespaces initialized prior to= loading the vsock_loopback kmod" + + # ns_loopback_local_local_late_module_load_fails + "Test that loopback connections still fail between local namespaces initi= alized prior to loading the vsock_loopback kmod" ) =20 readonly USE_SHARED_VM=3D(vm_server_host_client vm_client_host_server vm_l= oopback) @@ -912,6 +920,23 @@ test_ns_diff_local_vm_connect_to_local_host_fails() { return "${KSFT_FAIL}" } =20 +unload_module() { + local module=3D$1 + local i + + for ((i =3D 0; i < 5; i++)); do + modprobe -r "${module}" 2>/dev/null || : + + if [[ "$(lsmod | grep -c ${module})" -eq 0 ]]; then + return 0 + fi + + sleep 1 + done + + return 1 +} + __test_loopback_two_netns() { local ns0=3D$1 local ns1=3D$2 @@ -1264,6 +1289,112 @@ test_ns_delete_both_ok() { check_ns_changes_dont_break_connection "both" "delete" } =20 +test_ns_loopback_global_global_late_module_load_ok() { + declare -a pids + local unixfile + local ns0 ns1 + local pids + local port + + if ! unload_module vsock_loopback; then + log_host "Unable to unload vsock_loopback, skipping..." + return "${KSFT_SKIP}" + fi + + ns0=3Dloopback_ns0 + ns1=3Dloopback_ns1 + + ip netns del "${ns0}" &>/dev/null || : + ip netns del "${ns1}" &>/dev/null || : + ip netns add "${ns0}" + ip netns add "${ns1}" + ns_set_mode "${ns0}" global + ns_set_mode "${ns1}" global + ip netns exec "${ns0}" ip link set dev lo up + ip netns exec "${ns1}" ip link set dev lo up + + modprobe vsock_loopback &> /dev/null || : + + unixfile=3D$(mktemp -u /tmp/XXXX.sock) + port=3D321 + ip netns exec "${ns1}" \ + socat TCP-LISTEN:"${port}",fork \ + UNIX-CONNECT:"${unixfile}" & + pids+=3D($!) + + host_wait_for_listener "${ns1}" "${port}" + ip netns exec "${ns0}" socat UNIX-LISTEN:"${unixfile}",fork \ + TCP-CONNECT:localhost:"${port}" & + pids+=3D($!) + + if ! host_vsock_test "${ns0}" "server" 1 "${port}"; then + ip netns del "${ns0}" &>/dev/null || : + ip netns del "${ns1}" &>/dev/null || : + terminate_pids "${pids[@]}" + return "${KSFT_FAIL}" + fi + + if ! host_vsock_test "${ns1}" "127.0.0.1" 1 "${port}"; then + ip netns del "${ns0}" &>/dev/null || : + ip netns del "${ns1}" &>/dev/null || : + terminate_pids "${pids[@]}" + return "${KSFT_FAIL}" + fi + + ip netns del "${ns0}" &>/dev/null || : + ip netns del "${ns1}" &>/dev/null || : + terminate_pids "${pids[@]}" + + return "${KSFT_PASS}" +} + +test_ns_loopback_local_local_late_module_load_fails() { + declare -a pids + local ns0 ns1 + local outfile + local pids + local rc + + if ! unload_module vsock_loopback; then + log_host "Unable to unload vsock_loopback, skipping..." + return "${KSFT_SKIP}" + fi + + ns0=3Dloopback_ns0 + ns1=3Dloopback_ns1 + + ip netns del "${ns0}" &>/dev/null || : + ip netns del "${ns1}" &>/dev/null || : + ip netns add "${ns0}" + ip netns add "${ns1}" + ns_set_mode "${ns0}" local + ns_set_mode "${ns1}" local + + modprobe vsock_loopback &> /dev/null || : + + outfile=3D$(mktemp /tmp/XXXX.vmtest.out) + ip netns exec "${ns0}" socat VSOCK-LISTEN:${port} STDOUT \ + > "${outfile}" 2>/dev/null & + pids+=3D($!) + + echo TEST | \ + ip netns exec "${ns1}" socat STDIN VSOCK-CONNECT:1:${port} \ + 2>/dev/null + + if grep -q "TEST" "${outfile}" 2>/dev/null; then + rc=3D"${KSFT_FAIL}" + else + rc=3D"${KSFT_PASS}" + fi + + ip netns del "${ns0}" &>/dev/null || : + ip netns del "${ns1}" &>/dev/null || : + terminate_pids "${pids[@]}" + rm -f "${outfile}" + + return "${rc}" +} + shared_vm_test() { local tname =20 --=20 2.47.3