mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-19 18:19:38 -05:00
selftests/vsock: add namespace tests for CID collisions
Add tests to verify CID collision rules across different vsock namespace modes. 1. Two VMs with the same CID cannot start in different global namespaces (ns_global_same_cid_fails) 2. Two VMs with the same CID can start in different local namespaces (ns_local_same_cid_ok) 3. VMs with the same CID can coexist when one is in a global namespace and another is in a local namespace (ns_global_local_same_cid_ok and ns_local_global_same_cid_ok) The tests ns_global_local_same_cid_ok and ns_local_global_same_cid_ok make sure that ordering does not matter. The tests use a shared helper function namespaces_can_boot_same_cid() that attempts to start two VMs with identical CIDs in the specified namespaces and verifies whether VM initialization failed or succeeded. Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com> Link: https://patch.msgid.link/20260121-vsock-vmtest-v16-10-2859a7512097@meta.com Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
06cf7895ab
commit
605caec5ad
@@ -50,6 +50,10 @@ readonly TEST_NAMES=(
|
||||
vm_loopback
|
||||
ns_host_vsock_ns_mode_ok
|
||||
ns_host_vsock_child_ns_mode_ok
|
||||
ns_global_same_cid_fails
|
||||
ns_local_same_cid_ok
|
||||
ns_global_local_same_cid_ok
|
||||
ns_local_global_same_cid_ok
|
||||
)
|
||||
readonly TEST_DESCS=(
|
||||
# vm_server_host_client
|
||||
@@ -66,6 +70,18 @@ readonly TEST_DESCS=(
|
||||
|
||||
# ns_host_vsock_child_ns_mode_ok
|
||||
"Check /proc/sys/net/vsock/ns_mode is read-only and child_ns_mode is writable."
|
||||
|
||||
# ns_global_same_cid_fails
|
||||
"Check QEMU fails to start two VMs with same CID in two different global namespaces."
|
||||
|
||||
# ns_local_same_cid_ok
|
||||
"Check QEMU successfully starts two VMs with same CID in two different local namespaces."
|
||||
|
||||
# ns_global_local_same_cid_ok
|
||||
"Check QEMU successfully starts one VM in a global ns and then another VM in a local ns with the same CID."
|
||||
|
||||
# ns_local_global_same_cid_ok
|
||||
"Check QEMU successfully starts one VM in a local ns and then another VM in a global ns with the same CID."
|
||||
)
|
||||
|
||||
readonly USE_SHARED_VM=(
|
||||
@@ -577,6 +593,68 @@ test_ns_host_vsock_ns_mode_ok() {
|
||||
return "${KSFT_PASS}"
|
||||
}
|
||||
|
||||
namespaces_can_boot_same_cid() {
|
||||
local ns0=$1
|
||||
local ns1=$2
|
||||
local pidfile1 pidfile2
|
||||
local rc
|
||||
|
||||
pidfile1="$(create_pidfile)"
|
||||
|
||||
# The first VM should be able to start. If it can't then we have
|
||||
# problems and need to return non-zero.
|
||||
if ! vm_start "${pidfile1}" "${ns0}"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
pidfile2="$(create_pidfile)"
|
||||
vm_start "${pidfile2}" "${ns1}"
|
||||
rc=$?
|
||||
terminate_pidfiles "${pidfile1}" "${pidfile2}"
|
||||
|
||||
return "${rc}"
|
||||
}
|
||||
|
||||
test_ns_global_same_cid_fails() {
|
||||
init_namespaces
|
||||
|
||||
if namespaces_can_boot_same_cid "global0" "global1"; then
|
||||
return "${KSFT_FAIL}"
|
||||
fi
|
||||
|
||||
return "${KSFT_PASS}"
|
||||
}
|
||||
|
||||
test_ns_local_global_same_cid_ok() {
|
||||
init_namespaces
|
||||
|
||||
if namespaces_can_boot_same_cid "local0" "global0"; then
|
||||
return "${KSFT_PASS}"
|
||||
fi
|
||||
|
||||
return "${KSFT_FAIL}"
|
||||
}
|
||||
|
||||
test_ns_global_local_same_cid_ok() {
|
||||
init_namespaces
|
||||
|
||||
if namespaces_can_boot_same_cid "global0" "local0"; then
|
||||
return "${KSFT_PASS}"
|
||||
fi
|
||||
|
||||
return "${KSFT_FAIL}"
|
||||
}
|
||||
|
||||
test_ns_local_same_cid_ok() {
|
||||
init_namespaces
|
||||
|
||||
if namespaces_can_boot_same_cid "local0" "local1"; then
|
||||
return "${KSFT_PASS}"
|
||||
fi
|
||||
|
||||
return "${KSFT_FAIL}"
|
||||
}
|
||||
|
||||
test_ns_host_vsock_child_ns_mode_ok() {
|
||||
local orig_mode
|
||||
local rc
|
||||
|
||||
Reference in New Issue
Block a user