From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 E77A6238140; Tue, 5 Aug 2025 21:49:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430556; cv=none; b=PAxHhhTHxhsFeBPQC457Ve42r/ocon/D69brexT6IqXHA75qdIGUqe5wyECNIrtjoz8eX/eLyYR72X+N8uAGblvPJAevC+xztZsfVjJ6AKdMQG1X5g1nhmYhwr4tXluiFYhYDuNw7/GqxuV7l3eL2/ShTzSiiDyas22Lw42fFAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430556; c=relaxed/simple; bh=fx/j12c7X1avNwUI/3xCv2xqKheT5FfFmdObHtz3nVA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qu8g7bGTW9A3EMw12UhjUavCcLt+3nH+3XK+Ht8oQkJZiv9lF7dlvOfsQnDkF8w+6C5mCJTW343iCPBEg6e5IHJ9Ghl+5Up1eGPeRLQZITSZZiK0DOeWWdSbqkbOv7HQz/oU6eUpmZ4XFa4S7TB9F5gzujDNj1wEcplETIQP/QU= 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=Lh81nYVt; arc=none smtp.client-ip=209.85.210.178 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="Lh81nYVt" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-76be8e4b59aso3180976b3a.1; Tue, 05 Aug 2025 14:49:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430554; x=1755035354; 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=Gx5ceqh/7qvQN6L4QFmi/M9LWu27g5Sp9j8Lv00Y7aY=; b=Lh81nYVtt0EEuZaabk0hiFQBONjwGzNczDucDM4W44ERIGmC3LR6jnnrBOZ0wFy7/B Ep5xVKrsJ8XKrkU8e2fBUiGQWUdVEB1LANWsgozBX6uApQTGZMWU95Bem/vFIoIt2ONv 2UK+mUznDe0h2Ory/pDpSbFkB2cVcnwTgzpcjt4y4sgILa9mWVKQUNIfB2dgrupkAig7 I2tiqVoReuxID3sov8G+mCVv95AtCgEw/KNS2QL24SOaXml5d/t7azpOjV/I3+ztLXmx VdII8Cee3ttnI+Zled6IXS6t9m/wESu70Dv0gC4NBTebmokVvG+GcMJObmeDVFXL+to8 /6QQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430554; x=1755035354; 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=Gx5ceqh/7qvQN6L4QFmi/M9LWu27g5Sp9j8Lv00Y7aY=; b=g6a0ZUmMrgqIqoDUXN6n2FmtzD58sehnAeUe7686F6ZYuma2w95xwnmIDdDkZPcDh7 0CkpBQ1EF/TgX2QnQEZtW7lvR9qdqPTjXYyaxKCUFlimLOpnz37C1BOE1J4OHz7OJn2a qambUAloNCFfJX5ILGhkgQbvU+A/I7yul6c0BXKMDFFFSYqguKwupUb5zWRBV58ynPGG mwiQSs9+GQCAsYY2rgvUSHTGuu7cq8GyzFUJjjQHf8PaP1RD7avNgayCoonB3uF3er7i G2o/52lr2qCkvDeygJaw6dHd6L9NsTbTwf18zHSNLvoXG7cJhtTcxY3RIikGDgwHc/c7 keNA== X-Forwarded-Encrypted: i=1; AJvYcCUtKQynRu4REuNlsnnWXzYHV89CwaYNQE672/LCgTsYNa+IXMnclXpVmX8ih+wGqUZxRcc/J+tMXqwvEcrPsidv@vger.kernel.org, AJvYcCUuE8q7vC5T8o2W0qvuTpcqkQ2hnbuFUBGzMDnnjHEmmwmq2ukAQtajnsPxsrxCMhXkrpw=@vger.kernel.org, AJvYcCVkZ3dZsoeLC/9AiEQOi2NQkgznqU+k7iKwqwtZ+hgNp04efUivDHw/AKQgT1DCQ39zFAWb1hkQgWUuYpOD@vger.kernel.org, AJvYcCWwLnc34GKDueOsXcggNNhqMI+I8qtOdNQuP2s9MyztO7AKz44IfCqMdgeYxD2ORXHkjpJGPghL@vger.kernel.org, AJvYcCXVjv/wlKI6IuPacPhjQhIzYaM4PEpGhFA8aza0RNAKVDxu/c7XXk4SpetqtsaBi3xqiLoJhMwNnIGSLhGh@vger.kernel.org X-Gm-Message-State: AOJu0Yzvr7zz6H0VnYhQN+ht8Uze0rZfcFHg9jETkhI9mLiwLfLGNbNw 6PcytW5woL8INd2/wu3aQPfQ+9PRUSrXoMIo0qPOZTzZ/yA+G78qdtKi X-Gm-Gg: ASbGnct0Ij6eu2OfJRl8lb5eyL2uamH+pJJcrFflD9RBbr2pjwBe6EncuSkJzuaE0cU SDmo50bad9KuPrP1v32T1UXNr6bxf1iT/J20awNXsNJ4D3bvyKgu5hRZ8KlKieDU02/YblmAR1G snsERdsVVWhynQxK0HK9SvrXvXpErUgsFYFAtvL4dec/bVSht2q15HLAzbSLGYckZf9TbeSZyvD M4PKygnrneqrjSbPgQ720Tuy7lp/jGyJdmg3aR0LMeWMsGVUPgS5R1ZSH2zz3CAPkMyyevCWHf1 cmbm9uYT7n3E0wn+VESq6qpp7bXE2y4yB3aLp4qNFeJubWMTi+kI9TtDhGf0nfr8h+EhY+ZsE9Q GiFNbIsfI+9jh+45N6/8= X-Google-Smtp-Source: AGHT+IEM+7ah9OnFP8VaGRZ5rhV8vXufNMLrUwoiWelHwq+LhOlK9tECYmajZTfLn97xMBqRGxMpVQ== X-Received: by 2002:a17:902:d4c9:b0:23f:dc56:66e2 with SMTP id d9443c01a7336-242a0b60289mr2909435ad.38.1754430554146; Tue, 05 Aug 2025 14:49:14 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:2::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241d1ef83f3sm141034935ad.28.2025.08.05.14.49.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:13 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:09 -0700 Subject: [PATCH RFC net-next v4 01/12] vsock: a per-net vsock NS mode state 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: <20250805-vsock-vmtest-v4-1-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add the per-net vsock NS mode state. This only adds the structure for holding the mode necessary and some of the definitions, but does not integrate the functionality yet. Signed-off-by: Bobby Eshleman --- MAINTAINERS | 1 + include/net/af_vsock.h | 42 ++++++++++++++++++++++++++++++++++++++++++ include/net/net_namespace.h | 4 ++++ include/net/netns/vsock.h | 18 ++++++++++++++++++ 4 files changed, 65 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 1bc1698bc5ae..76905fc1c1d3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -26208,6 +26208,7 @@ L: netdev@vger.kernel.org S: Maintained F: drivers/vhost/vsock.c F: include/linux/virtio_vsock.h +F: include/net/netns/vsock.h F: include/uapi/linux/virtio_vsock.h F: net/vmw_vsock/virtio_transport.c F: net/vmw_vsock/virtio_transport_common.c diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h index d40e978126e3..d34bf7dbc69a 100644 --- a/include/net/af_vsock.h +++ b/include/net/af_vsock.h @@ -10,6 +10,7 @@ =20 #include #include +#include #include #include =20 @@ -256,4 +257,45 @@ static inline bool vsock_msgzerocopy_allow(const struc= t vsock_transport *t) { return t->msgzerocopy_allow && t->msgzerocopy_allow(); } + +static inline u8 vsock_net_mode(struct net *net) +{ + u8 ret; + + spin_lock_bh(&net->vsock.lock); + ret =3D net->vsock.ns_mode; + spin_unlock_bh(&net->vsock.lock); + return ret; +} + +static inline void vsock_net_set_mode(struct net *net, u8 mode) +{ + spin_lock_bh(&net->vsock.lock); + net->vsock.ns_mode =3D mode; + net->vsock.written =3D true; + spin_unlock_bh(&net->vsock.lock); +} + +/* Return true if mode has already been written once. Otherwise, return fa= lse. */ +static inline bool vsock_net_mode_can_set(struct net *net) +{ + bool ret; + + spin_lock_bh(&net->vsock.lock); + ret =3D !net->vsock.written; + spin_unlock_bh(&net->vsock.lock); + + return ret; +} + +/* Return true if vsock net mode check passes. Otherwise, return false. + * + * Read more about modes in comment header of net/vmw_vsock/af_vsock.c. + */ +static inline bool vsock_net_check_mode(struct net *n1, struct net *n2) +{ + return net_eq(n1, n2) || + (vsock_net_mode(n1) =3D=3D VSOCK_NET_MODE_GLOBAL && + vsock_net_mode(n2) =3D=3D VSOCK_NET_MODE_GLOBAL); +} #endif /* __AF_VSOCK_H__ */ diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 025a7574b275..005c0da4fb62 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -196,6 +197,9 @@ struct net { /* Move to a better place when the config guard is removed. */ struct mutex rtnl_mutex; #endif +#if IS_ENABLED(CONFIG_VSOCKETS) + struct netns_vsock vsock; +#endif } __randomize_layout; =20 #include diff --git a/include/net/netns/vsock.h b/include/net/netns/vsock.h new file mode 100644 index 000000000000..0bad4652815c --- /dev/null +++ b/include/net/netns/vsock.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __NET_NET_NAMESPACE_VSOCK_H +#define __NET_NET_NAMESPACE_VSOCK_H + +#include + +#define VSOCK_NET_MODE_GLOBAL 1 +#define VSOCK_NET_MODE_LOCAL (1 << 1) + +struct netns_vsock { + struct ctl_table_header *vsock_hdr; + spinlock_t lock; + + /* protected by lock */ + u8 ns_mode; + bool written; +}; +#endif /* __NET_NET_NAMESPACE_VSOCK_H */ --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 8FB89275B02; Tue, 5 Aug 2025 21:49:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430559; cv=none; b=Xcx5LZwA+8hX/YlvdsMSICJXUkRFQ8zUsW3JLN59X2uo690pt3IsPOhrYBqr+hZUMEqNZ8MVvMYpsB2Clml87p6Do9NiQMxrKxkuXnPAQso69h+1Cs5Uxn/rFmcA4rb8ONR69yczkv9mHfWU8woJRd0cCcSyIMQQR9mAQ4rYs18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430559; c=relaxed/simple; bh=CDv1Bq9IATltc0TiHl4mQECx9R2KqlZC2n1J6SSVOj8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gOkzAgcwyX6/qQe099rdIpY1Z+QlGeM/9yZcyEWvwvWIaiNiV9Ax77Cwus+WnvN67M1uDG41WqgzNzrQJ3o9+oz7t61MWpmvf23nkjEU0bKTn5cYGGD9R7kjsVxShXlF/RKvzpRAOQGIdbUsBK4P+HkLj6NIFgWvJjCHMe+of9M= 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=nZavytIH; arc=none smtp.client-ip=209.85.216.51 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="nZavytIH" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-3214762071bso2366922a91.3; Tue, 05 Aug 2025 14:49:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430556; x=1755035356; 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=U0FnPyhHm3WVprItOStvPF/G0ADOLLcY9YeC2HhcpJo=; b=nZavytIHeTAhbRzUAjFnUk/duVHt2lgLUjCkTBx6lgbxRh54iS63PtNx7Y1/z5iS8v ZX8itx/1JqylYYQJulAaRc5hFy2BrBKYJ1bV/ilAd1G8w5IkIHi9S89fmKIUIKpVvIBc R+Y75AJNY4WIyNpd+rB/bEz+t5Ew13x0N5qUJ9hyBqXJGJV1MGYN/+sq35u81shodStY 8lUg4Eu2PslvZvl44ZGLN+DG45LczWuCKvx2e0Jh7ehRo+zUVgIDkaoTuEYH37y37xKM qP07MCjd1mvYTELj1ydvnpJGdu2kYqdzvgo5kusSZ1AylKVl48HBXTjwZOA4tbFBjR2p G66w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430556; x=1755035356; 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=U0FnPyhHm3WVprItOStvPF/G0ADOLLcY9YeC2HhcpJo=; b=R+peH7jTegj8pCI6PSveShjw16pkOe5/FC07aSGSdpMNCEWVJJrh+F/gjEMMyc5rPb FR3W942/tJx12dYv1PtpWS+ZCkNbFU7yoeDUtXipfSFmMGaEd67bOsJJQxOiX1AnhL1T CRKxFAuxVFaq52Hi6tHyJnISGjTdlx9erd+gmyk25KEesN57xjURjMK2vIGhFVDO/Lda MRFrQKuIi9dWUWZX1MW5kxT1CAuqeXZyphcVN/DjEKnoTbiDum2ELz5oqDzwL/r+PN59 xgN1NtHCKiYzHXivig6bC63DpuqN+0JHOcKsgNtKsxjo1S8WZdFsHZ+y1uh1sbgZ6+uS hoLA== X-Forwarded-Encrypted: i=1; AJvYcCVP2tnPNxIzf2AGPs18j2DU84X4MpQiwoELXM2dqwrNMcvs4msmYJ6OgHrqd0l8DnMOJfI=@vger.kernel.org, AJvYcCWi+/ecnml5craNx/33jedVCHlSKSM7+owKGveQXVgVmdbf0AQiXEWiAidGa6TkqgMJ7d9o8LKn@vger.kernel.org, AJvYcCXEKIZUKv89+WIaf+ijrhUfXcBB/Au5GGBZR+Y+Wkym8JhqWE8mkB/CfvOXd2rCbh2VPAwABALgzl/OD3WTGmjx@vger.kernel.org, AJvYcCXUq1iYPmm2FFRQ5HqfwGoAG47qRfD6lrfd0njEbsOCsjPvv5+GJ5xlvyyHXicuNsuXg48j6BNLBAHlCjZT@vger.kernel.org, AJvYcCXebBn0pej3o9rAnrt/lSMhGrLtKB4TH87chw3LWayHwC67uMQtGO7jfC+eFEtvn7o5y9ez22T6YX0Y1RcJ@vger.kernel.org X-Gm-Message-State: AOJu0YwzXaD9WVm9ernaGxvsVp81F/BMmmr2HNiREbgPJues+kU3K6xY ekl/frOycv/OyhpQi7twR/DTKR3FX/OKqykA58e7blZzKRBr3XxwBXi9 X-Gm-Gg: ASbGncs5Y7/GIOX426kFBFMfAEiEMQ7qqB9cJhOw2jlm0bSdp/ePmBUD+vwx/1HYWhN 3PAfvl4Q0XyEH5dOF/bTECpQLGBadhp437zg8Z1sMsb+sa544yfRvcMO2MgKG6rqB4WlXAVSJ0d shUn1tff6RKpvrhOn/HhNYzVG85UPLXklRtfa5ZVlFrbm4jwc2mj0Mq7CRvVZoCQ4V75Fxy1u0s i4LoheJ8elwLWtrvMsGle9ZdgfX3yLp4HD5xc66NXXbBsnnLqwCau8nCpQ6RTyc3S+aZ/1VJe6j vcmIIbCnAcb8dqO83ROzUN1vvZPN87eWbaUONPS/+aA2kRg2Imv7gQWqshq5b3einbcEaPp/M/q GdQgeo7KM4H4qvB5pCwqY X-Google-Smtp-Source: AGHT+IHhgArUDVEklDhUo3FAHUEOH2pq0YKOQiSFglKsHXA8X5kgylXUPHewA95TMT6Ar3nMPtRlMQ== X-Received: by 2002:a17:90b:568d:b0:321:1a89:f692 with SMTP id 98e67ed59e1d1-32166c2918bmr458783a91.8.1754430555834; Tue, 05 Aug 2025 14:49:15 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:74::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-31f63f33e58sm17823090a91.33.2025.08.05.14.49.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:15 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:10 -0700 Subject: [PATCH RFC net-next v4 02/12] vsock: add net to vsock skb cb 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: <20250805-vsock-vmtest-v4-2-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add a net pointer to the vsock skb and helpers for getting/setting it. This is in preparation for adding vsock NS support. Signed-off-by: Bobby Eshleman --- include/linux/virtio_vsock.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index 36fb3edfa403..93edc1e798a5 100644 --- a/include/linux/virtio_vsock.h +++ b/include/linux/virtio_vsock.h @@ -13,6 +13,7 @@ struct virtio_vsock_skb_cb { bool reply; bool tap_delivered; u32 offset; + struct net *net; }; =20 #define VIRTIO_VSOCK_SKB_CB(skb) ((struct virtio_vsock_skb_cb *)((skb)->cb= )) @@ -111,6 +112,16 @@ static inline size_t virtio_vsock_skb_len(struct sk_bu= ff *skb) return (size_t)(skb_end_pointer(skb) - skb->head); } =20 +static inline struct net *virtio_vsock_skb_net(struct sk_buff *skb) +{ + return VIRTIO_VSOCK_SKB_CB(skb)->net; +} + +static inline void virtio_vsock_skb_set_net(struct sk_buff *skb, struct ne= t *net) +{ + VIRTIO_VSOCK_SKB_CB(skb)->net =3D net; +} + #define VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE (1024 * 4) #define VIRTIO_VSOCK_MAX_BUF_SIZE 0xFFFFFFFFUL #define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE (1024 * 64) --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 3D71628BAA6; Tue, 5 Aug 2025 21:49:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430560; cv=none; b=c5O2Ud5srK0r8vtUgC0n7YdVSj5IyUrCvmzyY09zKe5E0wOoeB4Phtq0M5GRYk7pma8xtdxaA+nPIMa1EA3gyGVgy78JjeMl1gNZAWV/bTkL8i0RWC2rI6Q/nzRVpUZcEqTDe7+e6HvYAVHKbbByiySFenQK1vBHzOOBCzxOzfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430560; c=relaxed/simple; bh=3gl4ZBbJ/p4i+XTyhNL9thZZ7fOtHU1zUlQvt4jU12k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b2DgpGgnarIqqlGh2VMlhiDGXbE8Y1aO5uI05OQNGYKDUZM++JduJLc5zy8v7Ch7Tz+FBPLMkkE9ADJ40sFrA8vi/Dn5yBSr5eQ4kNN0+DuVuqwLLqbaDt+FklkEjKOqnmQw9FOOfBSdV1dMMZZ2lkB24YiZxKBEYMPh76c8Vqk= 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=RiBAjR5f; arc=none smtp.client-ip=209.85.215.177 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="RiBAjR5f" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-b4239091facso3064444a12.0; Tue, 05 Aug 2025 14:49:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430557; x=1755035357; 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=la1KUk0k8/W2nKzb/83NwhbfEgOVD6+Egvu6G0RFz1Y=; b=RiBAjR5fbeqhSz6ogam/BAFSBxPQGKSd2Ubg/4UtQqQul6uuy0sAYaSwuN74ndAfR2 lD7DZD9R+LKLCvvetVJE+uLtwZ3STsTqGsqwlYs/9OEjqtmQpnF34tpQTsTQDmjFmYd5 oh2nit87ounOVdXsP8toWhCwFiANhisyqbNqDS9xemkc/uwYURTgaUcMuBQt1LpZL5zf 4mqjg8O6s/ycGChHXBGc4LPiMCRebGpjLNLUPn6SWip6u8YgKZZg+oJvAD0VJOW3cPcu uBii266zPy8QZOvI2W3ybN3aK2cv68tHc9XLz+cHsxvjOfLoIRs7U+u2bTREgt3xQH5u o7kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430557; x=1755035357; 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=la1KUk0k8/W2nKzb/83NwhbfEgOVD6+Egvu6G0RFz1Y=; b=T5oTSVoAgiuMXUqVfJ2b55cFE8UKsxky9OqJ6GFA0I9miH6DlMMxRxkwrBqApQGY47 ro6prK3+cMratDRCj0qu5/Irp8x+crifnkMFVUDKBDWXPHZyCkoIscpRqks8ZIH0mBqc LJsFFhwInAl0oZViimN3T2uIWHzVGTI48TnCQnIWGYDwP5sQF7RfBDNM+FK9dOxq6xPU YNFTM28cq5D002LO0/0dMTWZFwdkVxqfQCU9G3sktuiAqayiZXmWswhpa/a1yA+3iIJM Oei+U0EBHWhLvcs/hWm1VMzaiBzQ8iObfu6JZurj5LX56U+SBQ1pj8K8Akbn9YnTWhDK J+4w== X-Forwarded-Encrypted: i=1; AJvYcCUlko1F28qrNlA/L9sE+oVswU8LbLjiKC9Va2KmHq+Xz0l1TGwirXVNMq02vywEFoR1zdUo/cByTqR7T0/0z/Hg@vger.kernel.org, AJvYcCUrO5MUdWy/4wZSoreYZXRyo1PidqhmuYG+rVlwJ8SKSJd+svwCQ6jvYdOQ/YQS1QjT1MiR/5bi@vger.kernel.org, AJvYcCUsa6/g20DSE24kTErlGvATW2jXH8fB/UiNmdGiEQNDsb9a4upCW2N4XjB0l/kKlLlh6soBxqwOYadVovXF@vger.kernel.org, AJvYcCWAsFcB+C3opPLPdmAXmRG/lwGaniaZ/A/CypSTLoTIz40TIiIw0j1m+mgJ98IqEnm4hXA=@vger.kernel.org, AJvYcCX0dhP0yGMGQ3kBDBOgahf/J1FvSzkrgMevy61KMddA9vj9/xDcyKlLuYLlOrcqO7LCSo+id/gHMDlyhHfP@vger.kernel.org X-Gm-Message-State: AOJu0YzSz2+TNyZW1T2doK69NkErF3/GLkoLL3f+XdbI1vvltAUM8KkB tGvPtg23Q0fn6+DsfXhvSrS8ssy3m3mzVYfJHJxT6osPsh5qMs5Mj3AQqhEnqobj X-Gm-Gg: ASbGncvLizglfNvHsV2Nk5u8L4aOayDDZrneTfPxRQ8utUz4L48d64rl4Z2jW9msTJU okhqEE/rBchRgI518sgnB+/KIEXvnYCggJPzy6co2cEf2OfG/qLSC5o0zW5uPNHAR74fRPE7dnJ kp1J9Kx8WJ/NS07Zx3ntkDZbunfNQO9dYSn3v6ez3bGD6yr5/Spsdwda6wtqHgn7/g6EZ9VOTwE d+cGcV9ReX1JVequ7vjxnFSNkomO7HPIHIPXg9P0YVkguTEnqsN179q2NJqqbmnc5nHBpl0VXoI V3wE8VIU7a9vquwijzoWMRXikB2GHFSQvf4mqmAgVv2yYVcnXx1y56UVvNkHoWhbCeBLgZ1KYOT vnnC7W8we8+6xkOCNOvGgQzo/CPgra+o= X-Google-Smtp-Source: AGHT+IEfVsZ7z0J3iBDI4SJdG7CWc4xkYtTen+LMu+0WuCO6AEqPqfq52bXIO6kQje2tU9911dhQQg== X-Received: by 2002:a17:902:ec92:b0:238:120:134a with SMTP id d9443c01a7336-2429f4380d2mr8804185ad.22.1754430557372; Tue, 05 Aug 2025 14:49:17 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:71::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241d1ef66efsm140519375ad.32.2025.08.05.14.49.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:16 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:11 -0700 Subject: [PATCH RFC net-next v4 03/12] vsock: add netns to af_vsock core 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: <20250805-vsock-vmtest-v4-3-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add netns functionality (initialization, passing to transports, procfs, etc...) to the af_vsock socket layer. Later patches that add netns support = to transports depend on this patch. Signed-off-by: Bobby Eshleman --- include/net/af_vsock.h | 13 +++- net/vmw_vsock/af_vsock.c | 198 +++++++++++++++++++++++++++++++++++++++++++= ---- 2 files changed, 194 insertions(+), 17 deletions(-) diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h index d34bf7dbc69a..0c0c351394de 100644 --- a/include/net/af_vsock.h +++ b/include/net/af_vsock.h @@ -144,7 +144,7 @@ struct vsock_transport { int flags); int (*seqpacket_enqueue)(struct vsock_sock *vsk, struct msghdr *msg, size_t len); - bool (*seqpacket_allow)(u32 remote_cid); + bool (*seqpacket_allow)(struct vsock_sock *vsk, u32 remote_cid); u32 (*seqpacket_has_data)(struct vsock_sock *vsk); =20 /* Notification. */ @@ -214,9 +214,10 @@ void vsock_enqueue_accept(struct sock *listener, struc= t sock *connected); void vsock_insert_connected(struct vsock_sock *vsk); void vsock_remove_bound(struct vsock_sock *vsk); void vsock_remove_connected(struct vsock_sock *vsk); -struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr); +struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr, struct net = *net); struct sock *vsock_find_connected_socket(struct sockaddr_vm *src, - struct sockaddr_vm *dst); + struct sockaddr_vm *dst, + struct net *net); void vsock_remove_sock(struct vsock_sock *vsk); void vsock_for_each_connected_socket(struct vsock_transport *transport, void (*fn)(struct sock *sk)); @@ -258,6 +259,12 @@ static inline bool vsock_msgzerocopy_allow(const struc= t vsock_transport *t) return t->msgzerocopy_allow && t->msgzerocopy_allow(); } =20 +extern struct net __vsock_global_net; +static inline struct net *vsock_global_net(void) +{ + return &__vsock_global_net; +} + static inline u8 vsock_net_mode(struct net *net) { u8 ret; diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 218d91e6b32b..c69c2db03162 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -83,6 +83,24 @@ * TCP_ESTABLISHED - connected * TCP_CLOSING - disconnecting * TCP_LISTEN - listening + * + * - Namespaces in vsock support two different modes configured + * through /proc/net/vsock_ns_mode. The modes are "local" and "global". + * Each mode defines how the namespace interacts with CIDs. + * /proc/net/vsock_ns_mode is write-once, so that it may be configured + * by a namespace manager. The default is "global". The mode is set + * per-namespace. + * + * The modes affect the allocation and accessibility of CIDs as follows: + * - global - aka fully public + * - CID allocation draws from the public pool + * - AF_VSOCK sockets may reach any CID allocated from the public pool + * - AF_VSOCK sockets may not reach CIDs allocated from private pools + * + * - local - aka fully private + * - CID allocation draws only from the private pool, does not affect = public pool + * - AF_VSOCK sockets may only reach CIDs from the private pool + * - AF_VSOCK sockets may not reach CIDs allocated from outside the po= ol */ =20 #include @@ -100,6 +118,7 @@ #include #include #include +#include #include #include #include @@ -111,6 +130,7 @@ #include #include #include +#include #include #include =20 @@ -149,6 +169,9 @@ static const struct vsock_transport *transport_dgram; static const struct vsock_transport *transport_local; static DEFINE_MUTEX(vsock_register_mutex); =20 +struct net __vsock_global_net; +EXPORT_SYMBOL_GPL(__vsock_global_net); + /**** UTILS ****/ =20 /* Each bound VSocket is stored in the bind hash table and each connected @@ -235,33 +258,42 @@ static void __vsock_remove_connected(struct vsock_soc= k *vsk) sock_put(&vsk->sk); } =20 -static struct sock *__vsock_find_bound_socket(struct sockaddr_vm *addr) +static struct sock *__vsock_find_bound_socket(struct sockaddr_vm *addr, + struct net *net) { struct vsock_sock *vsk; =20 list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) { + struct sock *sk =3D sk_vsock(vsk); + if (vsock_addr_equals_addr(addr, &vsk->local_addr)) - return sk_vsock(vsk); + if (vsock_net_check_mode(net, sock_net(sk))) + return sk; =20 if (addr->svm_port =3D=3D vsk->local_addr.svm_port && (vsk->local_addr.svm_cid =3D=3D VMADDR_CID_ANY || - addr->svm_cid =3D=3D VMADDR_CID_ANY)) - return sk_vsock(vsk); + addr->svm_cid =3D=3D VMADDR_CID_ANY) && + vsock_net_check_mode(net, sock_net(sk))) + return sk; } =20 return NULL; } =20 static struct sock *__vsock_find_connected_socket(struct sockaddr_vm *src, - struct sockaddr_vm *dst) + struct sockaddr_vm *dst, + struct net *net) { struct vsock_sock *vsk; =20 list_for_each_entry(vsk, vsock_connected_sockets(src, dst), connected_table) { + struct sock *sk =3D sk_vsock(vsk); + if (vsock_addr_equals_addr(src, &vsk->remote_addr) && - dst->svm_port =3D=3D vsk->local_addr.svm_port) { - return sk_vsock(vsk); + dst->svm_port =3D=3D vsk->local_addr.svm_port && + vsock_net_check_mode(net, sock_net(sk))) { + return sk; } } =20 @@ -304,12 +336,12 @@ void vsock_remove_connected(struct vsock_sock *vsk) } EXPORT_SYMBOL_GPL(vsock_remove_connected); =20 -struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr) +struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr, struct net = *net) { struct sock *sk; =20 spin_lock_bh(&vsock_table_lock); - sk =3D __vsock_find_bound_socket(addr); + sk =3D __vsock_find_bound_socket(addr, net); if (sk) sock_hold(sk); =20 @@ -320,12 +352,13 @@ struct sock *vsock_find_bound_socket(struct sockaddr_= vm *addr) EXPORT_SYMBOL_GPL(vsock_find_bound_socket); =20 struct sock *vsock_find_connected_socket(struct sockaddr_vm *src, - struct sockaddr_vm *dst) + struct sockaddr_vm *dst, + struct net *net) { struct sock *sk; =20 spin_lock_bh(&vsock_table_lock); - sk =3D __vsock_find_connected_socket(src, dst); + sk =3D __vsock_find_connected_socket(src, dst, net); if (sk) sock_hold(sk); =20 @@ -528,7 +561,7 @@ int vsock_assign_transport(struct vsock_sock *vsk, stru= ct vsock_sock *psk) =20 if (sk->sk_type =3D=3D SOCK_SEQPACKET) { if (!new_transport->seqpacket_allow || - !new_transport->seqpacket_allow(remote_cid)) { + !new_transport->seqpacket_allow(vsk, remote_cid)) { module_put(new_transport->module); return -ESOCKTNOSUPPORT; } @@ -678,6 +711,7 @@ static int __vsock_bind_connectible(struct vsock_sock *= vsk, { static u32 port; struct sockaddr_vm new_addr; + struct net *net =3D sock_net(sk_vsock(vsk)); =20 if (!port) port =3D get_random_u32_above(LAST_RESERVED_PORT); @@ -694,7 +728,7 @@ static int __vsock_bind_connectible(struct vsock_sock *= vsk, =20 new_addr.svm_port =3D port++; =20 - if (!__vsock_find_bound_socket(&new_addr)) { + if (!__vsock_find_bound_socket(&new_addr, net)) { found =3D true; break; } @@ -711,7 +745,7 @@ static int __vsock_bind_connectible(struct vsock_sock *= vsk, return -EACCES; } =20 - if (__vsock_find_bound_socket(&new_addr)) + if (__vsock_find_bound_socket(&new_addr, net)) return -EADDRINUSE; } =20 @@ -2645,6 +2679,133 @@ static struct miscdevice vsock_device =3D { .fops =3D &vsock_device_ops, }; =20 +#define VSOCK_NS_MODE_NAME_MAX 8 + +static struct ctl_table vsock_table[] =3D { + { + .procname =3D "vsock_ns_mode", + .data =3D &init_net.vsock.ns_mode, + .maxlen =3D sizeof(u8), + .mode =3D 0644, + .proc_handler =3D proc_dostring + }, +}; + +static int __net_init vsock_sysctl_register(struct net *net) +{ + struct ctl_table *table; + + if (net_eq(net, &init_net)) { + table =3D vsock_table; + } else { + table =3D kmemdup(vsock_table, sizeof(vsock_table), GFP_KERNEL); + if (!table) + goto err_alloc; + + table[0].data =3D &net->vsock.ns_mode; + } + + net->vsock.vsock_hdr =3D register_net_sysctl_sz(net, "net/vsock", table, + ARRAY_SIZE(vsock_table)); + if (!net->vsock.vsock_hdr) + goto err_reg; + + return 0; + +err_reg: + if (!net_eq(net, &init_net)) + kfree(table); +err_alloc: + return -ENOMEM; +} + +static void vsock_sysctl_unregister(struct net *net) +{ + const struct ctl_table *table; + + table =3D net->vsock.vsock_hdr->ctl_table_arg; + unregister_net_sysctl_table(net->vsock.vsock_hdr); + if (!net_eq(net, &init_net)) + kfree(table); +} + +#ifdef CONFIG_PROC_FS +static int vsock_proc_ns_mode_show(struct seq_file *seq, void *v) +{ + struct net *net =3D seq_file_single_net(seq); + const char *p =3D "invalid"; + + spin_lock_bh(&net->vsock.lock); + if (net->vsock.ns_mode =3D=3D VSOCK_NET_MODE_GLOBAL) + p =3D "global"; + else if (net->vsock.ns_mode =3D=3D VSOCK_NET_MODE_LOCAL) + p =3D "local"; + else + WARN_ONCE(1, "invalid vsock_ns_mode"); + spin_unlock_bh(&net->vsock.lock); + seq_printf(seq, "%s", p); + return 0; +} + +static int vsock_proc_ns_mode_write(struct file *file, char *buf, size_t s= ize) +{ + struct seq_file *m =3D file->private_data; + struct net *net =3D seq_file_single_net(m); + size_t len =3D size - 1; + int ret =3D 0; + + if (!vsock_net_mode_can_set(net)) + return -EPERM; + + if (!strncmp(buf, "global", len)) + vsock_net_set_mode(net, VSOCK_NET_MODE_GLOBAL); + else if (!strncmp(buf, "local", len)) + vsock_net_set_mode(net, VSOCK_NET_MODE_LOCAL); + else + return -EINVAL; + + return ret; +} +#endif /* CONFIG_PROC_FS */ + +static void vsock_net_init(struct net *net) +{ + spin_lock_init(&net->vsock.lock); + net->vsock.ns_mode =3D VSOCK_NET_MODE_GLOBAL; +} + +static __net_init int vsock_sysctl_init_net(struct net *net) +{ + vsock_net_init(net); + + if (vsock_sysctl_register(net)) + return -ENOMEM; + +#ifdef CONFIG_PROC_FS + if (!proc_create_net_single_write("vsock_ns_mode", 0644, net->proc_net, + vsock_proc_ns_mode_show, + vsock_proc_ns_mode_write, + NULL)) + goto err_sysctl; +#endif + + return 0; + +err_sysctl: + vsock_sysctl_unregister(net); + return -ENOMEM; +} + +static __net_exit void vsock_sysctl_exit_net(struct net *net) +{ + vsock_sysctl_unregister(net); +} + +static struct pernet_operations vsock_sysctl_ops __net_initdata =3D { + .init =3D vsock_sysctl_init_net, + .exit =3D vsock_sysctl_exit_net, +}; + static int __init vsock_init(void) { int err =3D 0; @@ -2672,10 +2833,19 @@ static int __init vsock_init(void) goto err_unregister_proto; } =20 + if (register_pernet_subsys(&vsock_sysctl_ops)) { + err =3D -ENOMEM; + goto err_unregister_sock; + } + + vsock_net_init(&init_net); + vsock_net_init(vsock_global_net()); vsock_bpf_build_proto(); =20 return 0; =20 +err_unregister_sock: + sock_unregister(AF_VSOCK); err_unregister_proto: proto_unregister(&vsock_proto); err_deregister_misc: --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 C5B8829ACCE; Tue, 5 Aug 2025 21:49:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430562; cv=none; b=rgkv2GJZQpK+z6L4T7thMBw+QZfuqM+6q+nQHKpTftjcxMDf5OPJQq1raIfeI9S2TNeH5DVMVvu77DcrbPUIHHBDmg4KdzolrTzzkL3T/TAItdPWLqHSvMuWAVBVedEPqtspCbPw3V4aFLE9kEvwCBr4izvIqWHaLGjeURNS6Jc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430562; c=relaxed/simple; bh=L8+UJORlszErIif6aAL4B/2M4IL1vW1dLWaDie77K18=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=le83gEjOhkwQRDHm1FOE7jmd4vrI0DodZQ5Y+2pEL53UrQP/PyLHtL59YQ66f0tET1iyOn+kwuxOTfkla/fXa/AwCdyMQqCh7a9jF6xizzBSVljHvCM6fkkdf1iqB8Fn5PTdkwxo7zOeJAMGxPnzS6yyXosqM0lcS9aWl5+2zQg= 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=XY+td+8k; arc=none smtp.client-ip=209.85.210.174 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="XY+td+8k" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-76bd9d723bfso3928146b3a.1; Tue, 05 Aug 2025 14:49:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430559; x=1755035359; 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=vClpSthvja0ciP4EEb0dS5NFu0AwWPReylpsN3j0yGc=; b=XY+td+8kiMSHVC6qBvyGQFKqyro8XhdMzcTEsFHjjZmaERPGWotLNNXnI9s5NJO056 Ne4LclOCYM9yDzkSyjY2s8OwtVTpOGfv8iOyBwvsdYCKBe3ZGydLpHK8HT+O2JO0dxFj XT069WiK6VU43SAbo+KefQvrLMzVhRtBmANTO5rghk+JayL3ClCljw7/+fxX/jdKgf/o qD+8kqZf7kwUd7R467WkRQ6lXn9gEIRGptQXIEO8mWIlAme9k4qOLKDXqT2s2geXUEeP wIeZUp4Ebr8VzzhRPuUMViqgxY4sXtwQjNq5NGwt/6HDBr7WP0NYPfLrlPpFTb2Wz6Tr 7GEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430559; x=1755035359; 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=vClpSthvja0ciP4EEb0dS5NFu0AwWPReylpsN3j0yGc=; b=CZBMKnjqF3mUcx59i8WvDXSuvCp0KyDu2KGZXiEpwRJMGYPFZX4YgdFFI8tfL1rYte q7BSSZEBlcmZP5el0GghrOHagrt1IG+wYl5183mnkPxZzRFgqBSA2kNOCiirYqu0qoC3 rc8pr/agK/FabD0mykHGnicrQjR2TWGZlkqT99/JuKUc5TX8Dv5HFHPvHjJ0uUWpOdy5 dZ5slbaIKP/u3r3wYwQR+DhdU6cul7iRiBW5w/7Bp3cxQWL5B/dRJHxuy9r+zpDrI80L MaI3aHKb2tg/U028lyRkn3JCwBHms+sU1LpVTOqZhvdAx2psgVAthzGZOi1LomQEMsGD 1H/A== X-Forwarded-Encrypted: i=1; AJvYcCULHCgWHAyyECO1lXhPaqenzaGMY+p6BB0YLzoPJZOIy6NUmvL80pmv3+pus9lvE4r3a6udUTO6ebzri7ih@vger.kernel.org, AJvYcCUpEaB/zDQDiPDnCsTz6lJWrie7VSQyjpdFr2UkXz1IrsHCtBIOm2TWc/D3GZpsBwDRxXabmw0+E9BdJWMG@vger.kernel.org, AJvYcCVd8bZRxAsucrmZOY61zSr3DnoFuy0m6uOAkaEaWzTLsPBxidaYKfNTvUymEYYj2euqbtc=@vger.kernel.org, AJvYcCW3Il1QBvGLv9EMcWmYF77P3mclSE2nw+wtWI4zgjSOI0pvPhBmZGS1yhUyozMrsFUhgPCxL0a0@vger.kernel.org, AJvYcCWH9WPspdh9KeILhvPuj1E1EYJxNl8gDYGk/YeAeZUSbhsQmA1HsFKnylw8I4vLFPs1EJ0jmE8RgQIqvFYAgzvA@vger.kernel.org X-Gm-Message-State: AOJu0YyBc79w/hmZ3+sAXp83udO8cDwhnHd/gNeND/B5IfmBo68BikDI Skfwn06DXt69XO/ujvCeWdvGN2Ub7JlxHhyiYsGST2Q5LOKsENDykvCX X-Gm-Gg: ASbGncuy//OrWtEMuri3PQlK1Ph8xBdflqHK0iqZsvxn4LjuR/4+uNpIGbSjVWK3zkQ hhj+/1539HFeVP4RRFi19gxztBmH5GUXMKh3DldZ5qsJ1xdPbEXQGtulNOI35g9f6Nzehdg50yd hRSkHzh8IAWB9SwPEvh8A+GLlauBw6j0TtYZtgpVJzZvSG6MB/aqB6wa0oU+FEOMsw17yInVuwp 8qVHpW7glu0TFi0ycrtM8POrTwiXFSNtd6144FOgQkvOG2PnrvTAnBxq5haqQdP6ndk300QrDrQ YaPnb4AO5u3vZTN6CtUavI633YNJxplSBmaSLD9+u/h1fQUqb/DT7uVb6NtwSW6VEC/rz9jrJFx bvjLK6Hu1dCl3P4Qjq2s= X-Google-Smtp-Source: AGHT+IHIXvB6uOXF9tZ4IgyXPs/ln/7LW82JyFWlXgNyNXaIj2h0hXCpxPlYbwZ9V7Lb/cFmKcuy3w== X-Received: by 2002:a17:902:f60c:b0:240:2145:e51d with SMTP id d9443c01a7336-2429f625afemr8254875ad.31.1754430559091; Tue, 05 Aug 2025 14:49:19 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:7::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e89769c1sm143611275ad.77.2025.08.05.14.49.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:18 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:12 -0700 Subject: [PATCH RFC net-next v4 04/12] vsock/virtio: add netns to virtio transport common 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: <20250805-vsock-vmtest-v4-4-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add support to the virtio-vsock common code for passing around net namespace pointers (tx and rx). The series still requires vhost/virtio transport support to be added by future patches. Signed-off-by: Bobby Eshleman --- include/linux/virtio_vsock.h | 1 + net/vmw_vsock/virtio_transport_common.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index 93edc1e798a5..81355f84b76c 100644 --- a/include/linux/virtio_vsock.h +++ b/include/linux/virtio_vsock.h @@ -160,6 +160,7 @@ struct virtio_vsock_pkt_info { u32 remote_cid, remote_port; struct vsock_sock *vsk; struct msghdr *msg; + struct net *net; u32 pkt_len; u16 type; u16 op; diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio= _transport_common.c index 1b5d9896edae..310f2e92c527 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -313,6 +313,8 @@ static struct sk_buff *virtio_transport_alloc_skb(struc= t virtio_vsock_pkt_info * info->flags, zcopy); =20 + virtio_vsock_skb_set_net(skb, info->net); + return skb; out: kfree_skb(skb); @@ -524,6 +526,7 @@ static int virtio_transport_send_credit_update(struct v= sock_sock *vsk) struct virtio_vsock_pkt_info info =3D { .op =3D VIRTIO_VSOCK_OP_CREDIT_UPDATE, .vsk =3D vsk, + .net =3D sock_net(sk_vsock(vsk)), }; =20 return virtio_transport_send_pkt_info(vsk, &info); @@ -1064,6 +1067,7 @@ int virtio_transport_connect(struct vsock_sock *vsk) struct virtio_vsock_pkt_info info =3D { .op =3D VIRTIO_VSOCK_OP_REQUEST, .vsk =3D vsk, + .net =3D sock_net(sk_vsock(vsk)), }; =20 return virtio_transport_send_pkt_info(vsk, &info); @@ -1079,6 +1083,7 @@ int virtio_transport_shutdown(struct vsock_sock *vsk,= int mode) (mode & SEND_SHUTDOWN ? VIRTIO_VSOCK_SHUTDOWN_SEND : 0), .vsk =3D vsk, + .net =3D sock_net(sk_vsock(vsk)), }; =20 return virtio_transport_send_pkt_info(vsk, &info); @@ -1105,6 +1110,7 @@ virtio_transport_stream_enqueue(struct vsock_sock *vs= k, .msg =3D msg, .pkt_len =3D len, .vsk =3D vsk, + .net =3D sock_net(sk_vsock(vsk)), }; =20 return virtio_transport_send_pkt_info(vsk, &info); @@ -1142,6 +1148,7 @@ static int virtio_transport_reset(struct vsock_sock *= vsk, .op =3D VIRTIO_VSOCK_OP_RST, .reply =3D !!skb, .vsk =3D vsk, + .net =3D sock_net(sk_vsock(vsk)), }; =20 /* Send RST only if the original pkt is not a RST pkt */ @@ -1162,6 +1169,7 @@ static int virtio_transport_reset_no_sock(const struc= t virtio_transport *t, .op =3D VIRTIO_VSOCK_OP_RST, .type =3D le16_to_cpu(hdr->type), .reply =3D true, + .net =3D virtio_vsock_skb_net(skb), }; struct sk_buff *reply; =20 @@ -1462,6 +1470,7 @@ virtio_transport_send_response(struct vsock_sock *vsk, .remote_port =3D le32_to_cpu(hdr->src_port), .reply =3D true, .vsk =3D vsk, + .net =3D sock_net(sk_vsock(vsk)), }; =20 return virtio_transport_send_pkt_info(vsk, &info); @@ -1576,6 +1585,7 @@ void virtio_transport_recv_pkt(struct virtio_transpor= t *t, struct sk_buff *skb) { struct virtio_vsock_hdr *hdr =3D virtio_vsock_hdr(skb); + struct net *net =3D virtio_vsock_skb_net(skb); struct sockaddr_vm src, dst; struct vsock_sock *vsk; struct sock *sk; @@ -1603,9 +1613,9 @@ void virtio_transport_recv_pkt(struct virtio_transpor= t *t, /* The socket must be in connected or bound table * otherwise send reset back */ - sk =3D vsock_find_connected_socket(&src, &dst); + sk =3D vsock_find_connected_socket(&src, &dst, net); if (!sk) { - sk =3D vsock_find_bound_socket(&dst); + sk =3D vsock_find_bound_socket(&dst, net); if (!sk) { (void)virtio_transport_reset_no_sock(t, skb); goto free_pkt; --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 6993429ACFD; Tue, 5 Aug 2025 21:49:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430563; cv=none; b=N/zcuzBG6q6RpVxVrXHfamQkmaDHZKz039QE9DLO6vAGKerpw6CTQAYpsJ2msVzs7SZjAIjUzn9Inj+ybhOG95cfjlp8ggawtHKSP9XFzYi4XEKLOvxKeytu+LVv/eG0E47uvccu5EbKQhJ8BnSAnrPH4udy51Iti2Sv+xzDUMQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430563; c=relaxed/simple; bh=4nOiUR2yclelPvjzHls90OB1HWOtZ8j4Fd2CwpbPgy8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZjH82assKEdswV3ZwPjWdqZxjDU3IUDbox6SYeWgTBrNuVxuqEgU6WNy6HC5FaW62eGq7cIFvRoaVeNi7siorsJL9IlsdtwrX+u+ki7brGuWfN3S1WhqLDIfcxiTFqUW8uTxAkkpqOyHKGoI3tGgcupUF81V9uBXDiRGUpu/Obg= 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=lOX4Y6My; arc=none smtp.client-ip=209.85.210.169 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="lOX4Y6My" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-76a3818eb9bso4346293b3a.3; Tue, 05 Aug 2025 14:49:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430561; x=1755035361; 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=jIzbPe6n99JFgKHn/5BXgj7yzYZCxe9bDEHL/cgVeVU=; b=lOX4Y6MyaDBVriGnepT0V5AeuhB8XZbc7nnsEMXzWanaywuBjOol3av0sU2kK56i/V 0WQ/4kYAr9KldqvYQSllR/Rh7oFBQHm4T7Z8s9iBlgsJv9DWb+LHJVC56x3q7rV1SkiU m1Q77eEmIuxhUVKB76JbaYd4M7FOPUfHyi5aflIQApfgrAflqS6AddglJDcZr7pblbQ5 9iI5V7+3f/5IAi3HnDpo/NBOzqnu+99iy/carTih7Qv9cuXSgTZVuzpyx3bJFpn27kGd VOXdJwzMH+i+kFW/wuSe30K+TPQYBr2qU2IgCdPv4xlGtD1cbI6rrA5IlAW9S121f5A3 zvTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430561; x=1755035361; 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=jIzbPe6n99JFgKHn/5BXgj7yzYZCxe9bDEHL/cgVeVU=; b=nh2edPrYTqXJHdskFej+wPOV4KR7AAWopq8lSFt/l+vJQsFu2fDSnReFTjxoVBeYvh UGn/GCrUY/IIv7lnpFMdbsO89W0IkdajaVuLCcyHaxgJO/Uwq5P0LzdoUn9uWtNqCWUq YY57NSMOMi6Tw26gWk7HwlWzlUTjaPVc14Kd3pYNWjmK/Tf/4bQvCv4I4tYwlI116f7K ouY3gprBGvSnP3EXEwEzO7lBnHobJlfB5294Yi4sNx63UTSedy8lvf2SxIeUb1Its6Kv iNMLIen9KP4Ww6kmyee+5tR24khATtqxMFEZwU//ffVO5Xx9zchtj13V9K4SHUjC4udj NZ3g== X-Forwarded-Encrypted: i=1; AJvYcCU2URjAQ4jQ87AEg8FzojoSGUB8Iy5uz+M4GKv6wHoHSa1ODlO0NchONW4S0hYI28+AwAxZIlhspkYXjer7@vger.kernel.org, AJvYcCUDG1Ql4Tbvqjl1XCPQgaJ+Y4+0LTOUz9QBZBvuKkBGVOTonSbuSXPPnLQQZtK4bwnWtY7SVCk/gpvRYmQx@vger.kernel.org, AJvYcCVwJQ/eVwvfAK7na37yM0lhuV3OAY02VuiH/OA2YV1W623+46R0YHcR1LdX/wRHJEJBt61gbHFI@vger.kernel.org, AJvYcCWT8CTrTt5vWjSyY2ARoWG394Cf9RRG54aIgy1uvfQmKMUtB+TIGFgbgZPyK/afCoQZptA=@vger.kernel.org, AJvYcCXUxOsVzdJsevgR5zHjFIFICQhHE+srlu15KWq1EJ6Yomb3RCDjUONPKrmNdCUAY+/EdXC9Q3Tut3MhBHHQ4wLM@vger.kernel.org X-Gm-Message-State: AOJu0YwkStgfT/iXQzOWoXByvhmbEdLGO4xlOpjPpVeJXaG2V31e7RHp xPzNx2DK9rWZci9Xl/XGPeChO2XUcYsjUWgFCnzcZPqAUoYTRSZ3uc/P X-Gm-Gg: ASbGnctNKZnhTrI+N9e6NmhSIWfYC95KISeZwm3ynxa0Eotg8CbaEv3HfHWNiBgVVwv xRapN6K1Qc2wC5v47y8GcGbSHR8dMVc4bVUX78kkSw73hYFfzX1tXyTuJ6J1LJLBtNTdjZkzOy1 JFUtvDcde2FHCP+wRlcDPcxa5aMgTlUxFvB1Uyn5vyY0xTRMHPHLQbl/DWfaCeI8fYaVvT+VsaI azXD/AG/c6oockkAncA6/F5wQuQX1CN3w6UNWGbunvsNmYtA8UPxgqxGlFJTvE3ZUzVqt88oQrc 9n1bJqMH0Ix3kb5JrooE5f2xVYQqUwADbRH7kYwFt3vLLc5jnyh1DCbWZnJqq3LgxjRVl4QUazZ QNVvHEmM+wv5bt6g/fd78 X-Google-Smtp-Source: AGHT+IH30GOU7ALtk6a4Qu69GWLu4nFmm7a9hAyqteGUmf/zmxX9XY6X82MDI/g8fCQ810jQb8Mvgg== X-Received: by 2002:a17:902:e850:b0:235:e942:cb9e with SMTP id d9443c01a7336-242a0a765f6mr3164885ad.9.1754430560589; Tue, 05 Aug 2025 14:49:20 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:72::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241d1ef67aesm142920695ad.6.2025.08.05.14.49.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:19 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:13 -0700 Subject: [PATCH RFC net-next v4 05/12] vhost/vsock: add netns support 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: <20250805-vsock-vmtest-v4-5-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add the ability to isolate vsock flows using namespaces. The namespace for a VM is inherited from the PID that opened the vhost-vsock device. Signed-off-by: Bobby Eshleman --- drivers/vhost/vsock.c | 48 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 802153e23073..863419533a3f 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -46,6 +46,8 @@ static DEFINE_READ_MOSTLY_HASHTABLE(vhost_vsock_hash, 8); struct vhost_vsock { struct vhost_dev dev; struct vhost_virtqueue vqs[2]; + struct net *net; + netns_tracker ns_tracker; =20 /* Link to global vhost_vsock_hash, writes use vhost_vsock_mutex */ struct hlist_node hash; @@ -59,6 +61,22 @@ struct vhost_vsock { bool seqpacket_allow; }; =20 +static void vhost_vsock_net_set(struct vhost_vsock *vsock, struct net *net) +{ + if (net_eq(net, vsock_global_net())) + vsock->net =3D vsock_global_net(); + else + vsock->net =3D get_net_track(net, &vsock->ns_tracker, GFP_KERNEL); +} + +static void vhost_vsock_net_put(struct vhost_vsock *vsock) +{ + if (net_eq(vsock->net, vsock_global_net())) + return; + + put_net_track(vsock->net, &vsock->ns_tracker); +} + static u32 vhost_transport_get_local_cid(void) { return VHOST_VSOCK_DEFAULT_HOST_CID; @@ -67,7 +85,7 @@ static u32 vhost_transport_get_local_cid(void) /* Callers that dereference the return value must hold vhost_vsock_mutex o= r the * RCU read lock. */ -static struct vhost_vsock *vhost_vsock_get(u32 guest_cid) +static struct vhost_vsock *vhost_vsock_get(u32 guest_cid, struct net *net) { struct vhost_vsock *vsock; =20 @@ -78,9 +96,8 @@ static struct vhost_vsock *vhost_vsock_get(u32 guest_cid) if (other_cid =3D=3D 0) continue; =20 - if (other_cid =3D=3D guest_cid) + if (other_cid =3D=3D guest_cid && vsock_net_check_mode(net, vsock->net)) return vsock; - } =20 return NULL; @@ -272,13 +289,14 @@ static int vhost_transport_send_pkt(struct sk_buff *skb) { struct virtio_vsock_hdr *hdr =3D virtio_vsock_hdr(skb); + struct net *net =3D virtio_vsock_skb_net(skb); struct vhost_vsock *vsock; int len =3D skb->len; =20 rcu_read_lock(); =20 /* Find the vhost_vsock according to guest context id */ - vsock =3D vhost_vsock_get(le64_to_cpu(hdr->dst_cid)); + vsock =3D vhost_vsock_get(le64_to_cpu(hdr->dst_cid), net); if (!vsock) { rcu_read_unlock(); kfree_skb(skb); @@ -305,7 +323,7 @@ vhost_transport_cancel_pkt(struct vsock_sock *vsk) rcu_read_lock(); =20 /* Find the vhost_vsock according to guest context id */ - vsock =3D vhost_vsock_get(vsk->remote_addr.svm_cid); + vsock =3D vhost_vsock_get(vsk->remote_addr.svm_cid, sock_net(sk_vsock(vsk= ))); if (!vsock) goto out; =20 @@ -403,7 +421,7 @@ static bool vhost_transport_msgzerocopy_allow(void) return true; } =20 -static bool vhost_transport_seqpacket_allow(u32 remote_cid); +static bool vhost_transport_seqpacket_allow(struct vsock_sock *vsk, u32 re= mote_cid); =20 static struct virtio_transport vhost_transport =3D { .transport =3D { @@ -459,13 +477,14 @@ static struct virtio_transport vhost_transport =3D { .send_pkt =3D vhost_transport_send_pkt, }; =20 -static bool vhost_transport_seqpacket_allow(u32 remote_cid) +static bool vhost_transport_seqpacket_allow(struct vsock_sock *vsk, u32 re= mote_cid) { + struct net *net =3D sock_net(sk_vsock(vsk)); struct vhost_vsock *vsock; bool seqpacket_allow =3D false; =20 rcu_read_lock(); - vsock =3D vhost_vsock_get(remote_cid); + vsock =3D vhost_vsock_get(remote_cid, net); =20 if (vsock) seqpacket_allow =3D vsock->seqpacket_allow; @@ -525,6 +544,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_wor= k *work) continue; } =20 + virtio_vsock_skb_set_net(skb, vsock->net); total_len +=3D sizeof(*hdr) + skb->len; =20 /* Deliver to monitoring devices all received packets */ @@ -651,10 +671,16 @@ static void vhost_vsock_free(struct vhost_vsock *vsoc= k) =20 static int vhost_vsock_dev_open(struct inode *inode, struct file *file) { + struct vhost_virtqueue **vqs; struct vhost_vsock *vsock; + struct net *net; int ret; =20 + net =3D get_net_ns_by_pid(current->pid); + if (IS_ERR(net)) + return PTR_ERR(net); + /* This struct is large and allocation could fail, fall back to vmalloc * if there is no other way. */ @@ -668,6 +694,7 @@ static int vhost_vsock_dev_open(struct inode *inode, st= ruct file *file) goto out; } =20 + vhost_vsock_net_set(vsock, net); vsock->guest_cid =3D 0; /* no CID assigned yet */ vsock->seqpacket_allow =3D false; =20 @@ -707,7 +734,7 @@ static void vhost_vsock_reset_orphans(struct sock *sk) */ =20 /* If the peer is still valid, no need to reset connection */ - if (vhost_vsock_get(vsk->remote_addr.svm_cid)) + if (vhost_vsock_get(vsk->remote_addr.svm_cid, sock_net(sk))) return; =20 /* If the close timeout is pending, let it expire. This avoids races @@ -752,6 +779,7 @@ static int vhost_vsock_dev_release(struct inode *inode,= struct file *file) virtio_vsock_skb_queue_purge(&vsock->send_pkt_queue); =20 vhost_dev_cleanup(&vsock->dev); + vhost_vsock_net_put(vsock); kfree(vsock->dev.vqs); vhost_vsock_free(vsock); return 0; @@ -778,7 +806,7 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vsoc= k, u64 guest_cid) =20 /* Refuse if CID is already in use */ mutex_lock(&vhost_vsock_mutex); - other =3D vhost_vsock_get(guest_cid); + other =3D vhost_vsock_get(guest_cid, vsock->net); if (other && other !=3D vsock) { mutex_unlock(&vhost_vsock_mutex); return -EADDRINUSE; --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 0B6CD29B78D; Tue, 5 Aug 2025 21:49:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430564; cv=none; b=UtW78AbGxVwCJs93s6W2XB6fkSesPdX0fJfqNSOcTLDPfOy0s52vdMDCAgP+IWTTs1orwriOJPjBMbrWDc9YbieKCKXk4ATia+DwLv2o1AcieaquBjA+LXLUw9EY8fAWl7p1lvP1MMKwkfaaxygtHWhnssAxUMPHuP03A7V58MA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430564; c=relaxed/simple; bh=iVkInzQ7uHzZMQZ7UxyeGw74/8iMWFmqHrGNUTfOeag=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cVQrABHy6H1EngTGT7xSNPQsxMyfxgSf27TC2/Xc0KN5l7bWenhbqqpAjA1MPYQwbdXVzm9c4CYrMEljIvp4KPMBenxGstxZYJv/YFusmyYy+BJ9HO3OVLidTfLsH7TZF3v3SLC/QawW9CM/fqbnrP9fqVaypUoJneEqd1rcw7k= 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=VZvhyKzz; arc=none smtp.client-ip=209.85.216.53 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="VZvhyKzz" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-31f3b54da19so4129346a91.1; Tue, 05 Aug 2025 14:49:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430562; x=1755035362; 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=sm0/fMgK4tErQjYzZdv4phel9XrBq2Yycw99jmqjet8=; b=VZvhyKzziiNuh9V+BXeZi+wMiiQyLuK+EjDRjbZ7TBuKaUBFxoH+zI/ppa1RZviS0V I4/XIGJT+tAJpZCd+rfMLeZ8BNkhZ2bg1Wx+AysMiv3P+BUEQOiclp9FC/ESVC6g6ERc Hl8xM8Xl20j0jxo8NO4TYKUAEigeqw99wgy/BAEQoLMJkBBPSc8NNrH4IIVZcc6SwtCk BHMEtx1TzrcUg8Xr243Zsttlcrm4GfPueblUengzZ6TjUpQdATKkzs2KOgzwRh4LRPc6 yIPXWBM713wpFD4gNAdAs7rkjesOgn43r1j+D3DnuDSw8Vu/rPgvXC8Gj/rBe7nomeFD ndjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430562; x=1755035362; 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=sm0/fMgK4tErQjYzZdv4phel9XrBq2Yycw99jmqjet8=; b=eXQKWEOR14+yadJ4Zmh2Rq3FF5jF1MhUOFDPsrCSTXhrCdmIUtcjcu62l9GwdFcbGF +fl77QogUG+DB2cN9VkuxE5dMqLg7UGYMlOW3TS7IegvbPtVLx3G3KOCiMCuw7wKxlJ7 NS1/iFSdVS9UHd6FRRPPaDZOiL21GMzNEfmskesC7nYJSnuxVk+cio1aB4mg0R7mudnK uE3O7Bgi686/rUKCPu/cP/rTq3bdvf6GV6A6uXYMLZcSn3Fnzx6idBnXjbQ25MPgQh42 B2bVOeWOoQs6QeONS/bDzPe0BtjAsMMdHrv5JxEx0cqs0rmcCGp3xlWUhcFVxwYkVffr ubHQ== X-Forwarded-Encrypted: i=1; AJvYcCUB8rZqXZt+oB8+VJWYJtnuTVubleEK2YVOU3qKHQ9NJcQL8kY6uM1zPPwqiiISEgPq/8bC412bBPJzXMtz@vger.kernel.org, AJvYcCUEboTOAn8eFI1w5fUvxxWUtO54RTFxIsD3Q2XYBjN1SXmP+6x0TWYu+mo6MSLbKiAq2VWxILe9pEhmOgXmz7QR@vger.kernel.org, AJvYcCVzjf8MBS2JGOc6nGPn1DGbAwdTSDU9SSE6w339xOgDsuSRwx/QvRaKsY1cRHXvRvM28SPXLijW3nW7ODFo@vger.kernel.org, AJvYcCWHMaDJvBkT86nUk2wsuz5jDcvhkkbE+bc2/BHWB52UOarfK80ITfYzzK2JiTBUA3+8XqKKBXmT@vger.kernel.org, AJvYcCXjxPB4cDlVC0BP+G3e7q8nbdkTuouAPaFlw4WM7DVEIg+ESSvL0RBXxKQOMC0Kr6Z131k=@vger.kernel.org X-Gm-Message-State: AOJu0Yxt3AQYU+Gs6JioUdsVzL8RC6h1q4X5svDfozrzDn5/6MDIccyz oWPqRJpizbsIw3S5r15XBc1vA4/5aeQFe7OJP6UjuYMdZ8SxWgYATVHL X-Gm-Gg: ASbGncs8SQnBhP6XGKUvPmhFcaFbJJhrJ26rs7Zpr2LRiKn64GtxS3LblQiztsB8wHN J7BgXQ1mxGxKvUASorjRaBZdXZfgz7lVg2sDQnLxQJK8cUbOhaCWEzp3+S06QJ2J5LaihGMUchq 7ppKpxSLCjLRyia6UWt4ud/qmyrfJhVXT2xJCKbOJ75mobS+CmAhijyvKX052wycGrjJq3eOedB WO1cWgaiP6rujZwK9sJzOx08sLylfW90UdjgSHUgQD8vSR7dWwkHFVsr6tyggkkcRDdyi3LhIXH f/7Bd7PkXK4JjxQCRxkaDvFfcIa00wnSXxzZ0DLoWD+t67Dvh5JIgFwa+be1nd289qZ42DlHgvO oTSo4LzqXob+g0glnaCI3 X-Google-Smtp-Source: AGHT+IEkvDIFK5HkjsCOvoxAuFgibsDf9KbOCOhnG1IK5JHA4oFThHnwoGQ5xLGBLKlnGLxewHy3vQ== X-Received: by 2002:a17:90b:2783:b0:311:c93b:3ca2 with SMTP id 98e67ed59e1d1-32166c1e68amr448003a91.6.1754430562315; Tue, 05 Aug 2025 14:49:22 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:71::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-32161198f17sm1051118a91.17.2025.08.05.14.49.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:21 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:14 -0700 Subject: [PATCH RFC net-next v4 06/12] vsock/virtio: use the global netns 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: <20250805-vsock-vmtest-v4-6-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman This changes virtio-vsock to always use the global netns dummy so that all guest vsock continues to operate in global mode. The guest vsock behavior is unchanged. Signed-off-by: Bobby Eshleman --- net/vmw_vsock/virtio_transport.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transp= ort.c index f0e48e6911fc..25c1bca7b136 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -536,7 +536,7 @@ static bool virtio_transport_msgzerocopy_allow(void) return true; } =20 -static bool virtio_transport_seqpacket_allow(u32 remote_cid); +static bool virtio_transport_seqpacket_allow(struct vsock_sock *vsk, u32 r= emote_cid); =20 static struct virtio_transport virtio_transport =3D { .transport =3D { @@ -593,7 +593,7 @@ static struct virtio_transport virtio_transport =3D { .can_msgzerocopy =3D virtio_transport_can_msgzerocopy, }; =20 -static bool virtio_transport_seqpacket_allow(u32 remote_cid) +static bool virtio_transport_seqpacket_allow(struct vsock_sock *vsk, u32 r= emote_cid) { struct virtio_vsock *vsock; bool seqpacket_allow; @@ -649,6 +649,7 @@ static void virtio_transport_rx_work(struct work_struct= *work) } =20 virtio_vsock_skb_rx_put(skb); + virtio_vsock_skb_set_net(skb, vsock_global_net()); virtio_transport_deliver_tap_pkt(skb); virtio_transport_recv_pkt(&virtio_transport, skb); } --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 8AA6A29CB5A; Tue, 5 Aug 2025 21:49:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430566; cv=none; b=l+4giviGuOvw7BE7Cb/YIF2xZCW5BCzey4NF0YqR8Eb5IPJwco8/xrI9UEr/tvsLaCACNWAvFjeH6vtu5OZ1LVXzxI6cNAw7UxKb0hA3O0lHKFAmZ5b8qk6VKKdXvZ+DE+fdXx4vlfqf5gXdUOnS0JX0ad2C6CWtx8OpRcgB0sc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430566; c=relaxed/simple; bh=nH9AzNvXgldUU/AljR6D3DexM35j63PI4USaZ9u/z9k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZZYPBGSzizNpDC00zP1k35dwo3xwD+o3+lzv4cfEQDiL3E1b8JPEnwItLiIc7c5p8m4pG93dA9lxhBLc+a8Z2FOlHbygL8oyOv3enWPM+onuSt6KS5CFFv8SdTJ5jEDfgIDkfloc3UncAET8pifFSffVdsBDBgrhkCDBU/j+kuU= 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=V82Dm7vN; arc=none smtp.client-ip=209.85.214.182 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="V82Dm7vN" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-23fd3fe0d81so56702155ad.3; Tue, 05 Aug 2025 14:49:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430564; x=1755035364; 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=j7WdeYwSOTTiB9deoqbpcAAZGDfkPprbWBWnuaDCaW8=; b=V82Dm7vNK9O7k7aSAZMtUmgY74jLPJrWdD3q4EgX9N/ZW7ffhMV2qZUhWoaoMfR+Zu 9DQqtzU1Giv57Nh0IAO2u3UmvhWcbKp8+B+qaCSI6dwiAWZk7Y/WtWqtUs7ZBuwYm1KV BhPKXcHnzhQ7KE6XLe8JSWsikoYndGSBNjcwzR3OJL0HC79IFE20ecS6NiOudgv6lR07 FlDO3yc8oQlVX6vTTakQXoWiahElGv+k5zR3BwbLuf7Y1axBXvK+SsP6ofSivCy2+KRf 6a5RyW7k8XtCTdOVyh6NOQ3VPvTdMmQuZN1eozC8TjKrfwKuYw+vpCBrPWSLirduqCjY vwgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430564; x=1755035364; 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=j7WdeYwSOTTiB9deoqbpcAAZGDfkPprbWBWnuaDCaW8=; b=rY2eI0TyNGb8W0yiLlXKj5PLD6BB/T0vUgMl2+GocI9GZ3Lzpe16AtexytN+q9y+dZ 1HPbX2gn9gziPyc4C1vSdQwaPbGwQzVFCKF8nAPnAm6cRjrncMrGtqhBKX6WSQfrKgTN jO1ArSr9bYvd9bTiWwDiDajs1uLtA6WAbDuK5SrC3gBUsXwU81ocYPexSgBp5jlo6xhV XRZZT6amm8+L39wXeuYHNlPcBEncvfSjN5BxQSsJBsS+tvVhp/nzzgosxUR6BYSKWB0Z +anNsD1JFxsRwcM0vcDJnI2hEVDu0BvhuNY3iJK8nb33992xboMvlQ7fj5nG3bmU5fza xNxQ== X-Forwarded-Encrypted: i=1; AJvYcCUX5gN0iEZQYPUyIiuzcjhlx1ved+MOIejHgBz+6Et2nIhdOE6BzulPb7ZNL2X0d4OOgTOVAPYJ@vger.kernel.org, AJvYcCVSEK5aqpPEX3yCLkrctrjlyCcHg08adibtcc7nb8DD0SCsnACbuUQN+QLgiDokzpKG23M9DZyWprCe3MjYRfpC@vger.kernel.org, AJvYcCWLl4Aly0lrK9DVH0JFVEzhohJPDJTL7FChQJj1WXhnZMfSZ43L7SeJ18RX/jobudGlvqyPmuO58MkGNOzW@vger.kernel.org, AJvYcCWfKL21q5QPveWb1c9tY8wK8DOQNSJd0dVSMLu7CR9us8xNzDJ6mv4lCMNkeLcYOUg76og=@vger.kernel.org, AJvYcCXRuGcFo2D7PY1MVBIK/ZSZmoCwFRp9Gxv8fOIg289FoZbDT0aZ5yoKRzqP7gektqKl87G5112uvrLuezQt@vger.kernel.org X-Gm-Message-State: AOJu0YykSL/qi2md3xJ0XM4DeK8EgUecju6fYFX1CkY/W718g7i/sDaN ZfBE7r3gtnhpEeWUasVbFRGSKr+mg7UzyifKQM3rvr9Lv9LMBHXmY22q X-Gm-Gg: ASbGncuTAEfU1+uI7rOQ3JcfmdztXCETJajX75pGw4yX+U715p+kohDZA8VWaSJuElf 71BcG7eagSReMb5F74I5fbzd/wwVbbQHk3tJAivoCaZ63DXD8aBeOrjxvmpJSjvwaoBHfMVp7eW 3aosX5TH8SU9IRPFKfs4EgDuR0zawaUMrmCgI7C7iMJSjXGOHzKlzl7xu5lSJ3+kPf3UN/m0+dT G+xNtZQmW4TRAKmKmD6CWHmP+nwc1fT6DXC5avfbmZFrOrx74157Tbf24TgPjS6NzHeEJd2pxL4 K2HiMFK0Hulos7Vq2RKjiiyWjveLrr2hUXlplF97jskxUu2S7F+FzLOjoTl9NoAuGmCGX4UsFiy VHBjmB1vTkhl2D2/+Dd4L3WJmg6PA2A== X-Google-Smtp-Source: AGHT+IGx4vPl2oXpK9VlREXkqAjZ5FwbF92y0gDsYjmBbN35wDgdgTqIRJq/vOJfOY7uEhYx/Sid4g== X-Received: by 2002:a17:903:46cf:b0:240:48f4:40d5 with SMTP id d9443c01a7336-2429f5340a5mr8876385ad.39.1754430563927; Tue, 05 Aug 2025 14:49:23 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:7::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241d1f0fb4asm140671005ad.60.2025.08.05.14.49.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:23 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:15 -0700 Subject: [PATCH RFC net-next v4 07/12] hv_sock: add netns hooks 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: <20250805-vsock-vmtest-v4-7-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Make NS changes not break hyperv. Guest vsocks still remain in the global namespace always, so the behavior is unchanged. Signed-off-by: Bobby Eshleman --- net/vmw_vsock/hyperv_transport.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transp= ort.c index 432fcbbd14d4..8862297b09a7 100644 --- a/net/vmw_vsock/hyperv_transport.c +++ b/net/vmw_vsock/hyperv_transport.c @@ -313,7 +313,7 @@ static void hvs_open_connection(struct vmbus_channel *c= han) return; =20 hvs_addr_init(&addr, conn_from_host ? if_type : if_instance); - sk =3D vsock_find_bound_socket(&addr); + sk =3D vsock_find_bound_socket(&addr, vsock_global_net()); if (!sk) return; =20 --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.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 4BD0E2BD010; Tue, 5 Aug 2025 21:49:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430567; cv=none; b=IhPspw9U64oNQetig0hfP9uoFS7I62BPoz2xwHKWl1Bs2kPyQj9Id23a8IUAM6PwYHoYaX9omwFzz9m52r5+P1jFLSKat2oxoR8fULYwxJnxRrdN4FkjNabUQX7wP64CeSEmvQQwYwKW63Gc7xy6602ow//6VL2hkvrq0ayfjV0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430567; c=relaxed/simple; bh=P1/qaJCybjcXSEfP6RGJaoK9v8utpfUNtngCHpZIML8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qD7VesTm4HOEhus0/37yxcqBkSOBhgon0tiegln/9Yl4VjhKZLEAu9E2Er9B/q3dI3HhTBhHp2TXG6DRHhyZJfuR1BexMRADZz82ZSPAZtmdH6TYXO5VACQOlVYKrW1xBB4ShgBI9t+kM1oH76vg529/gyyHLJ1jMYoDyTWbRiE= 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=HHC/NxH1; arc=none smtp.client-ip=209.85.210.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="HHC/NxH1" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-76a3818eb9bso4346335b3a.3; Tue, 05 Aug 2025 14:49:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430565; x=1755035365; 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=xWqr1u7R6aV4zTd/B0j1tkHJBdcxjwTrCzBwm4Fr1i8=; b=HHC/NxH1yEuKE6hO2+10BGnFa6/NahjfNqjKoDF9BdxjbirkGJyVgSoAXpwBKvXIRz b+LiGJkMO7IK5GIsqLX9E84yx2lGdK+DkJDq5QgQEIslyE+ukEl8RY102CmKnUKbFdwb D7ItyQdfiP8FbYeaEHatHFgCxqB4NQxj3e6C0Jaa3h5bi6UCmE6NFwUNidPfPEktZeND 0wH4JO2/FBxBjX3gHQ26AbQYOtVpeRf8YRycGlaQ+sbmPIuE5VYPCscJHRvgPtcRZUOn 9oeKmW0spJxlwXC3wMueIOgg5CwtneI91nLdXyK/1UG6xcsMYWHWRUVSMswKW4yxEIHY /Ovg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430565; x=1755035365; 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=xWqr1u7R6aV4zTd/B0j1tkHJBdcxjwTrCzBwm4Fr1i8=; b=u/lqLEIhJm5zb9gTUEBnfLD0ulxOt5sISgN+o/zEmG4sx8K3/ZYoyEarRn1JkJfjMo N/pkgMEh8zoPOxsBO5Lxk6sLhaeYBj4/ociKBL3Jpc6/cNygkZFtDye+nBTXJGer4tmS NR4U8NQvmbTVmeT+lxXyXizl26SHDe1eMICxK+6W+FKkaSqI94l1Zf2LRL7dArJRNsxt c/ZOlW7qzjBHdl5ENdrnkJgzTQUp2FwwLrBEpuVXEDbdbqjy00Qsx4uQtleG3SOiME91 2i5tF/xYSQs1kFzBHCMqdqLvdO3xS536JTgv7fN3/sNpaIFgdF/s4roDUWSjOhevDv+x UBdw== X-Forwarded-Encrypted: i=1; AJvYcCU2zb4jNA04tdutI9FkjkPVSapLj2k02fMuMge7rqtZQyTgJIfI7nz3JL/51TBLoMHzbsOM5kcI6jkB1AZT@vger.kernel.org, AJvYcCUh4y54/18kdEn/tsaUEN3pDo4iHuvaVfhoJWAyyjcdnJYARs5RYjEEpNTvAoQPaYh0SPnQRukNTOmjfdxjVuWv@vger.kernel.org, AJvYcCUu+HaX5Ru/MDMgdNf5WNHd+qu7kVuqMJFNrQDejLP0dISDeYMXU7wQG7mb2JZp0Y56HQrTOJ09bZXcdHj2@vger.kernel.org, AJvYcCWQzviePB9PfEL2P5fF6IofOIaFVhMslT8jfm8oiYSrtYyEVEh42r/uJbMD1B8BAWvbsgI=@vger.kernel.org, AJvYcCXMu5eQo9dLwB+ZQOik+vAjwLmDDgXHfM/9DVE777xBZktQ++z9fJ4NLDfgtg4ZpVqT1OjShyfE@vger.kernel.org X-Gm-Message-State: AOJu0YzF4+0UBD26fE7vk0aP6ZpGvipbE7LXQ9cwBzgPuShJ/eCEGVZr EVIxbAkhtzDif279WTGVyVZZJS1cmFxqExez4xXDVxyeFEU8TxpP+m4nO406PGZS X-Gm-Gg: ASbGncudTxlJRrRLQJc6Nzet39ABspKd7BC+1eHdF5XokaWHqvo27Ah4mtqHrSi+ruV 2AKXVNxzVBJGm2hkf3kAliklN9s/Atgz2/Eob6MdDC7xDpEuDFawlaO9PT8QYsFMUcuE07CZ6da gBYBB880BZLosJ/RDfFSsHN0gybTkrSU0zYt8uxs/UXwdLZBN7KoSXM8VsNrUL/dAZCx7rRoXbR 5zPNtflPknbN4jnwnrRDb31V2Y7s8rp0sqd6dqrnjUpiXZUf1HFNVNX1hG2oM3m46hbPINOVSWu YAKqrUORniPoaWTMvKvNKfQe3ZkSkBiZ2+M7Tphitr8zi3MfViAvQVCiofWUnShQNTOn9M4vylD OG4ctCV8mNLJzjnePnAaV X-Google-Smtp-Source: AGHT+IF9PY4f57pByyzJj+B/qQvdtKhfo8+NygbXA2dkub9dCFAKHMnBQ4/xzUnOCuyFm/MQwZFvxw== X-Received: by 2002:a17:902:ce0b:b0:240:3e73:6df with SMTP id d9443c01a7336-242a0aa3352mr2595325ad.14.1754430565561; Tue, 05 Aug 2025 14:49:25 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:47::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8976a11sm142925745ad.86.2025.08.05.14.49.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:24 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:16 -0700 Subject: [PATCH RFC net-next v4 08/12] vsock/vmci: add netns hooks 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: <20250805-vsock-vmtest-v4-8-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add hooks for new internal NS calls to avoid breaking vmci. Guest vsocks remain in global mode namespaces, so behavior is unchanged. Signed-off-by: Bobby Eshleman --- net/vmw_vsock/vmci_transport.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c index 7eccd6708d66..3c434ee3ca8c 100644 --- a/net/vmw_vsock/vmci_transport.c +++ b/net/vmw_vsock/vmci_transport.c @@ -703,9 +703,9 @@ static int vmci_transport_recv_stream_cb(void *data, st= ruct vmci_datagram *dg) vsock_addr_init(&src, pkt->dg.src.context, pkt->src_port); vsock_addr_init(&dst, pkt->dg.dst.context, pkt->dst_port); =20 - sk =3D vsock_find_connected_socket(&src, &dst); + sk =3D vsock_find_connected_socket(&src, &dst, vsock_global_net()); if (!sk) { - sk =3D vsock_find_bound_socket(&dst); + sk =3D vsock_find_bound_socket(&dst, vsock_global_net()); if (!sk) { /* We could not find a socket for this specified * address. If this packet is a RST, we just drop it. --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 181452BDC1C; Tue, 5 Aug 2025 21:49:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430569; cv=none; b=gZ3F42yZVXEFDktfKxOVeAkTdt4GzKAjUWfU3l1XSPPmIdOILmFnzm9BT1UgCP+yUfZ4kszIERfnP0zi2wEaWDMlha3fl/7pM84Y6ylu8UrdzX9zJcIuVHfH+pogckE8we9kMjBuykGteTqeJcnr99AJUQ1mcHEG+nTGyFFth+o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430569; c=relaxed/simple; bh=yE/DV+Fa+l53UFcKqQnpm7tvRiqGrYmy2+67mIwjIOY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Mt9vTPvXVYHDPhCI5YPBW4mSvQ+w7BMVmhvoMpSBq4HvknQ4FXhnnSV12mIXhcf/t318tQNE00nTdzGJJ24YX4mlulVNeCig2wbefsK599baKZ3IjY29Rvx0D9NDoJ/+NmMBeO/aAoHr/0uQ1i5y6qXg5teAzWWQzfxIwP/qG3I= 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=mRVTfOw4; arc=none smtp.client-ip=209.85.216.50 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="mRVTfOw4" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-31f02b6cd37so4960706a91.1; Tue, 05 Aug 2025 14:49:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430567; x=1755035367; 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=YF1xl+BFznimsCJZAMsIsfYFMKtmpYiJtkLDu4zq/fg=; b=mRVTfOw44LKiqU2TD9y7c3tsxtfhaxoZ/qqNlPlj9AeGgIVo1sKxqe0BC29lR6ahTi QDVVNOrzp5WEhct4594mM79tWf9ncjECv5kjvVd43zNxJa3o/Xz7SULwmE6XsmesN2jh MTWek/Rgf+htm4wYyPJpmc3rmTltoj1SYdFEQzIdkuMaTYF8FhpSjr1whmwLhxMAHN93 L49Exfu4vLL0a/Mrlv3fpbJbSX85DS7LwSZiGSvhFwGvnyIE9rQFE88hDKNSOVqKxCd3 FjcBqb2GvFto6oz+D1VOop+8NLSd2LHIY9CZJFc2Vls25kN3DsiliBWao10h6TNfqHEf RWTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430567; x=1755035367; 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=YF1xl+BFznimsCJZAMsIsfYFMKtmpYiJtkLDu4zq/fg=; b=L+8cbGTjt4D/kBkOUiEXXAooPsvZh9sZaDBdTMIb+ytwTqk39cAj7IgF4/b93qI6Rp 2rZKIj0zwbwuOzToQc5H+zGnUg9xpnsoI1e1vxnYVjDhdSekJnQorDwED1MAaDB173xe K3HHsWm83bRnlFmd5jRY8ZIPHgSEXzB9LiiNQww4JVkCCB+Ux0RG6Cxm/NovEavidMZ+ xaCWvUzm0tMrJtll9NyhsSerzHqsnl4W9EU+sSiViWiFBzYtpsse2h9a+WdYvWhXkTK3 JKR7IboryfthvRRgAn/pcNTF7QtlsW1a6LT143a/ddg2jYsGtkjxgJSbzPdFc+06NZER Mx8g== X-Forwarded-Encrypted: i=1; AJvYcCUXQYknJLz7shgQZTOQ2N0sbIKKYXE+kd5hTmgLZUQYm1yv4TYynWXXCegHejnaQ3nuEno3OD8S@vger.kernel.org, AJvYcCVJmEG055sTbGoT0+EInXJ5NlV0MGLOYQkyfg6lE0YBtmnvKW+uLw0g36W18XFIqMxoYnxpOOtei95gVJI+@vger.kernel.org, AJvYcCVKumO4wco1BwwlDAO+IlNwrYhWVcL82Ktt8uL5PwUJlFb5C2cVjsM5AGoSAFXRcpI8rNnGfwoKbhegY4ztDMhg@vger.kernel.org, AJvYcCVQyYblhuYyYFBwqF+u6R+egUJSllezhpZZ4IWd9Uy4hxBiNacnIy4xUW6wQ5jma/3dbT/jP9vMTHH/QvDZ@vger.kernel.org, AJvYcCXQRPKIlUHWIZcqFPsvBImZlEIer95tKNiZTPKu8BmHuBwUwgK/shKGPqmdDXRyMzkOuzQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzVSCuNGObShXgWLB75Ui/QWEILIbJYOzhq1xHQsQAvFvcwe9uW 1g8frKcfRojvsADYcOI9JmAxpODrT07W2i2eViiWVXXQpbrOLh5X11Xm X-Gm-Gg: ASbGnctK9du2EALmsGtX2tkDqd6sOHoz2SkbrW2noiXXtCqgu0gu5tgG4zBth234acD 5lq2Vn0qNxRTsOR+jkidFMvSym1iNNCq579M88yD2bJ+RiF3GsdtiEq4JosDaRt1Dit5DmBEpU0 KBhxLN9cGbmqTnJcSyH3A+T0/yWxTwxP+bsRmDgMG3coKxnCQYvmn4Gj3Rwe9/vcps+zxN8X4+K tZBDjp8floLiIUaLDDZ7jqmAUarElinV29uLE1p6nUeNxBAm1LeXKdHx9skEfA2IdM8RNY/T29G oe3bJfTRc/19qHwpTKll0C86bYgsRDpj29pn78rz+ELhnah1DbLXzmnjptYC7vO4llcKL06CwSM S/rK66he7ekME2aQxarqNIqNL9t/syw== X-Google-Smtp-Source: AGHT+IHCmjITq2EcgeFufDBMLSAU8t8naXO7KFWocNSlYPDmL+mvWgkr7b7AJS9sPJlmK72xrdsQOg== X-Received: by 2002:a17:90b:4b:b0:31f:1db2:69b1 with SMTP id 98e67ed59e1d1-32167552daamr393375a91.18.1754430567204; Tue, 05 Aug 2025 14:49:27 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:5::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-31f63da5719sm17878352a91.6.2025.08.05.14.49.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:26 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:17 -0700 Subject: [PATCH RFC net-next v4 09/12] vsock/loopback: add netns support 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: <20250805-vsock-vmtest-v4-9-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add NS support to vsock loopback. Sockets in a global mode netns communicate with each other, regardless of namespace. Sockets in a local mode netns may only communicate with other sockets within the same namespace. Signed-off-by: Bobby Eshleman --- include/net/af_vsock.h | 4 +++ include/net/netns/vsock.h | 3 +++ net/vmw_vsock/af_vsock.c | 8 +++++- net/vmw_vsock/vsock_loopback.c | 59 +++++++++++++++++++++++++++++++++++---= ---- 4 files changed, 63 insertions(+), 11 deletions(-) diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h index 0c0c351394de..aefff6e102e7 100644 --- a/include/net/af_vsock.h +++ b/include/net/af_vsock.h @@ -305,4 +305,8 @@ static inline bool vsock_net_check_mode(struct net *n1,= struct net *n2) (vsock_net_mode(n1) =3D=3D VSOCK_NET_MODE_GLOBAL && vsock_net_mode(n2) =3D=3D VSOCK_NET_MODE_GLOBAL); } + +int vsock_loopback_init_net(struct net *net); +void vsock_loopback_exit_net(struct net *net); + #endif /* __AF_VSOCK_H__ */ diff --git a/include/net/netns/vsock.h b/include/net/netns/vsock.h index 0bad4652815c..4420346e10a8 100644 --- a/include/net/netns/vsock.h +++ b/include/net/netns/vsock.h @@ -7,6 +7,8 @@ #define VSOCK_NET_MODE_GLOBAL 1 #define VSOCK_NET_MODE_LOCAL (1 << 1) =20 +struct vsock_loopback; + struct netns_vsock { struct ctl_table_header *vsock_hdr; spinlock_t lock; @@ -14,5 +16,6 @@ struct netns_vsock { /* protected by lock */ u8 ns_mode; bool written; + struct vsock_loopback *loopback; }; #endif /* __NET_NET_NAMESPACE_VSOCK_H */ diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index c69c2db03162..5689ce7d5843 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -2778,9 +2778,12 @@ static __net_init int vsock_sysctl_init_net(struct n= et *net) { vsock_net_init(net); =20 - if (vsock_sysctl_register(net)) + if (vsock_loopback_init_net(net)) return -ENOMEM; =20 + if (vsock_sysctl_register(net)) + goto err_loopback; + #ifdef CONFIG_PROC_FS if (!proc_create_net_single_write("vsock_ns_mode", 0644, net->proc_net, vsock_proc_ns_mode_show, @@ -2793,12 +2796,15 @@ static __net_init int vsock_sysctl_init_net(struct = net *net) =20 err_sysctl: vsock_sysctl_unregister(net); +err_loopback: + vsock_loopback_exit_net(net); return -ENOMEM; } =20 static __net_exit void vsock_sysctl_exit_net(struct net *net) { vsock_sysctl_unregister(net); + vsock_loopback_exit_net(net); } =20 static struct pernet_operations vsock_sysctl_ops __net_initdata =3D { diff --git a/net/vmw_vsock/vsock_loopback.c b/net/vmw_vsock/vsock_loopback.c index 6e78927a598e..4fc07e3a1d2b 100644 --- a/net/vmw_vsock/vsock_loopback.c +++ b/net/vmw_vsock/vsock_loopback.c @@ -28,8 +28,19 @@ static u32 vsock_loopback_get_local_cid(void) =20 static int vsock_loopback_send_pkt(struct sk_buff *skb) { - struct vsock_loopback *vsock =3D &the_vsock_loopback; + struct vsock_loopback *vsock; int len =3D skb->len; + struct net *net; + + if (skb->sk) + net =3D sock_net(skb->sk); + else + net =3D NULL; + + if (net && net->vsock.ns_mode =3D=3D VSOCK_NET_MODE_LOCAL) + vsock =3D net->vsock.loopback; + else + vsock =3D &the_vsock_loopback; =20 virtio_vsock_skb_queue_tail(&vsock->pkt_queue, skb); queue_work(vsock->workqueue, &vsock->pkt_work); @@ -46,7 +57,7 @@ static int vsock_loopback_cancel_pkt(struct vsock_sock *v= sk) return 0; } =20 -static bool vsock_loopback_seqpacket_allow(u32 remote_cid); +static bool vsock_loopback_seqpacket_allow(struct vsock_sock *vsk, u32 rem= ote_cid); static bool vsock_loopback_msgzerocopy_allow(void) { return true; @@ -106,7 +117,7 @@ static struct virtio_transport loopback_transport =3D { .send_pkt =3D vsock_loopback_send_pkt, }; =20 -static bool vsock_loopback_seqpacket_allow(u32 remote_cid) +static bool vsock_loopback_seqpacket_allow(struct vsock_sock *vsk, u32 rem= ote_cid) { return true; } @@ -134,27 +145,55 @@ static void vsock_loopback_work(struct work_struct *w= ork) } } =20 -static int __init vsock_loopback_init(void) +static int vsock_loopback_init_vsock(struct vsock_loopback *vsock) { - struct vsock_loopback *vsock =3D &the_vsock_loopback; - int ret; - vsock->workqueue =3D alloc_workqueue("vsock-loopback", 0, 0); if (!vsock->workqueue) return -ENOMEM; =20 skb_queue_head_init(&vsock->pkt_queue); INIT_WORK(&vsock->pkt_work, vsock_loopback_work); + return 0; +} + +static void vsock_loopback_deinit_vsock(struct vsock_loopback *vsock) +{ + destroy_workqueue(vsock->workqueue); +} + +int vsock_loopback_init_net(struct net *net) +{ + net->vsock.loopback =3D kmalloc(GFP_KERNEL, sizeof(struct vsock_loopback)= ); + if (!net->vsock.loopback) + return -ENOMEM; + + return vsock_loopback_init_vsock(net->vsock.loopback); +} + +void vsock_loopback_exit_net(struct net *net) +{ + vsock_loopback_deinit_vsock(net->vsock.loopback); + kfree(net->vsock.loopback); +} + +static int __init vsock_loopback_init(void) +{ + struct vsock_loopback *vsock =3D &the_vsock_loopback; + int ret; + + ret =3D vsock_loopback_init_vsock(vsock); + if (ret < 0) + return ret; =20 ret =3D vsock_core_register(&loopback_transport.transport, VSOCK_TRANSPORT_F_LOCAL); if (ret) - goto out_wq; + goto out_deinit; =20 return 0; =20 -out_wq: - destroy_workqueue(vsock->workqueue); +out_deinit: + vsock_loopback_deinit_vsock(vsock); return ret; } =20 --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (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 61CCF25A347; Tue, 5 Aug 2025 21:49:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430570; cv=none; b=uFBB8HdXUbSJMKlpkWDOGGo9I43bzFnYYmysqPUZho4rDc9MPY232KJumSjIZcoMCeUGoKoN6VNlIwIzAjv35JuTwLqmcoIEylKr0BmekW5qOb68S99zkPpXszaI23RLUPuOA+oBig0KogNmV9aD4zkfjCvc7hvQ15IQ/80h9Kk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430570; c=relaxed/simple; bh=EcIbGeQZlwbG2n3LwrGpP4mEJH5ftJ79PCsbYjs89dI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qz9JgmNwAP6wp9thaKO3KAimu/zcO3QK6q3dygt22vL2qx1UMjz5TuCZ9jKDI6rt+lr/DouigYzth+f1iyvV0K9JcrpApFWZ7y9m2ye3JZNAdpQ1Qt67dTI5YONCl7/VIQ3R7N3BhSjy2trG56y3pBB3MCSlgQ3YD83S9FZY2MY= 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=VGXTktsu; arc=none smtp.client-ip=209.85.210.177 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="VGXTktsu" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-76bde897110so3926218b3a.3; Tue, 05 Aug 2025 14:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430569; x=1755035369; 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=D2evao2yHguRL1K3LeUb7zk3K6u4tPHmAj2zWCiTI2M=; b=VGXTktsu5JXSPJKCuquYy1l5y0tQs5n2ZmnTNXard82fvw5wKFWryuSpJGbkEmIkOD Z8mlZDK+A7U6L/Wje8crULyn8f1kfd0zlcj0J+rjt96F3KCTqL+oeA03YoHGB4PjAvBq WVcMU0DTEiUpmo2AQDsTaJ/Gb2GVNJO4b5mCxu76TUYGs0p4qUmTxvdBIV6oR4qexn9R E2FNtv6M2gilNKFXpURcprYDRBtSqBwK+Ysy5pisCE11yqpB7tTE9NUjzM5GGi8ma8kv SaYERdFh5iE9W2aedZA8928cZycXWpBcgAVmaGt3Kze1JYHO0tx5hrDX8ycIXlgC8+/4 U5fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430569; x=1755035369; 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=D2evao2yHguRL1K3LeUb7zk3K6u4tPHmAj2zWCiTI2M=; b=CFKG630MfrSGpqjc2CaiDaQFU0Fz2FLV/LEYEf8XFt9ADraBRCYAqCprKS9RIcmFUk TDpTpZQ9tiVi4VT8tGR81tlEab+MnO+3KP73OLJGGBfjpFd0eRsjLRLiHZ5XROiZbZ9z YaOU619ZLA4ksYWpR7ky+dS6MDHvMWg6iOWnCikDahvw1JvP1POTRu9PK+w81nMPDZnr FLgTZunoCk+dcXsE6DywQ63sk3fvU+2OH9NGnSiBf3oKaG1c9d2bDaNNPqwrGmg3P3SU gpjd9aV75SZfiyF8RKYewwS/3uh9OVqmr09HIv02/m4MDIodpYDjtZwmIET84dqZbVfD rX0A== X-Forwarded-Encrypted: i=1; AJvYcCUKQFJiGOz02Y7Gef/strIqCjFVdpgB6y54TFaw95PhlONvIveCloypDwrBFHnY3ktJ0OCYmXQcpkasgfj9@vger.kernel.org, AJvYcCV5OXigWaM+YMtzoXU5CnCo+zPTL6gph4TEopUXEFRZzRHQK8jXarEbfe8Xyf9EzPGM/ST8CIkbErpPLA7M@vger.kernel.org, AJvYcCVPpJvvs1dkA0VlaUPbEPOV2Gq89d6wjqgm52KzJsGLQfjF34f/rnj6h9AtfrNWW42d2oC5DQc4qVP17PY92bFR@vger.kernel.org, AJvYcCVjkRTG76/4bjzgge40dIzPZ9/YzDzxagaBa6FAQbLYiz4OU9eH8qhW92QN+RH2yA6MzZo=@vger.kernel.org, AJvYcCWKeJX+5Xg88eMXSjLVB8FfH/tERS+ma6HbjAFDizB4gMZNcZub3Fx1Y2MJDdkaAhUqDpp95RJM@vger.kernel.org X-Gm-Message-State: AOJu0Yx/Yfdf4HBt75u2gShnWngteN+vuejaW/w9Ntggs6OtPb9O8siq 4QQnglrC3vfXSB/HjiZHUcZ7MR6TtQ0Qkbiloh8AwHHLFwnLvRfmYLPd X-Gm-Gg: ASbGncvVHmx2DbUdJ75GqSayeoMVA9VzAy2xZ6a/RQVXP7cNs96pPf9mjOmEHg5Z9wM t1XKu51N1ybKE5C/2nUL6fPbf9/Lo5+1To0ZvJnZ24oCaOYHVGwM15GLvElwQczd33xxfw7Irm3 +B/YoxEd0es/PqRKYQ9gZbG0qmfNrnZGNT0u/sgZHnyGid9AzYXdCGVQkekYucwnBSxxULLT11y 15zbRoBWL584t+PnUWmZ5YpgaXIxIS8Y3Se1bx+g0L17x37vwOQd+Tp+e4uaHNxxHl773x6dvH1 b2vre+KGbB2Y2DPjryweUUOWGOnocMQroxq90OW73w5Pm0yOcOu+xXuKlPhpLyqJ5gc2nbanPNX EpEHEX64E3D+p5AQemI0= X-Google-Smtp-Source: AGHT+IHDiccVFKt2foX9cebWCbcaO5d4WSAdQ7P+8EpIETJhLNYp3VcDpYhvm/jSZPHzCAGnogLnzA== X-Received: by 2002:a05:6a20:1591:b0:21a:d1fe:9e82 with SMTP id adf61e73a8af0-240330fa38fmr182206637.30.1754430568726; Tue, 05 Aug 2025 14:49:28 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:9::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76bccfc0a2asm13891503b3a.70.2025.08.05.14.49.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:28 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:18 -0700 Subject: [PATCH RFC net-next v4 10/12] selftests/vsock: improve logging in vmtest.sh 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: <20250805-vsock-vmtest-v4-10-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Improve logging by adding configurable log levels. Additionally, improve usability of logging functions. Remove the test name prefix from logging functions so that logging calls can be made deeper into the call stack without passing down the test name or setting some global. Teach log function to accept a LOG_PREFIX variable to avoid unnecessary argument shifting. Signed-off-by: Bobby Eshleman --- tools/testing/selftests/vsock/vmtest.sh | 75 ++++++++++++++++-------------= ---- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/tools/testing/selftests/vsock/vmtest.sh b/tools/testing/selfte= sts/vsock/vmtest.sh index edacebfc1632..183647a86c8a 100755 --- a/tools/testing/selftests/vsock/vmtest.sh +++ b/tools/testing/selftests/vsock/vmtest.sh @@ -51,7 +51,12 @@ readonly TEST_DESCS=3D( "Run vsock_test using the loopback transport in the VM." ) =20 -VERBOSE=3D0 +readonly LOG_LEVEL_DEBUG=3D0 +readonly LOG_LEVEL_INFO=3D1 +readonly LOG_LEVEL_WARN=3D2 +readonly LOG_LEVEL_ERROR=3D3 + +VERBOSE=3D"${LOG_LEVEL_WARN}" =20 usage() { local name @@ -196,7 +201,7 @@ vm_start() { =20 qemu=3D$(command -v "${QEMU}") =20 - if [[ "${VERBOSE}" -eq 1 ]]; then + if [[ ${VERBOSE} -le ${LOG_LEVEL_DEBUG} ]]; then verbose_opt=3D"--verbose" logfile=3D/dev/stdout fi @@ -271,60 +276,56 @@ EOF =20 host_wait_for_listener() { wait_for_listener "${TEST_HOST_PORT_LISTENER}" "${WAIT_PERIOD}" "${WAIT_P= ERIOD_MAX}" -} - -__log_stdin() { - cat | awk '{ printf "%s:\t%s\n","'"${prefix}"'", $0 }' -} =20 -__log_args() { - echo "$*" | awk '{ printf "%s:\t%s\n","'"${prefix}"'", $0 }' } =20 log() { - local prefix=3D"$1" + local redirect + local prefix =20 - shift - local redirect=3D - if [[ ${VERBOSE} -eq 0 ]]; then + if [[ ${VERBOSE} -gt ${LOG_LEVEL_INFO} ]]; then redirect=3D/dev/null else redirect=3D/dev/stdout fi =20 + prefix=3D"${LOG_PREFIX:-}" + if [[ "$#" -eq 0 ]]; then - __log_stdin | tee -a "${LOG}" > ${redirect} + if [[ -n "${prefix}" ]]; then + cat | awk -v prefix=3D"${prefix}" '{printf "%s: %s\n", prefix, $0}' + else + cat + fi else - __log_args "$@" | tee -a "${LOG}" > ${redirect} - fi + if [[ -n "${prefix}" ]]; then + echo "${prefix}: " "$@" + else + echo "$@" + fi + fi | tee -a "${LOG}" > ${redirect} } =20 -log_setup() { - log "setup" "$@" +log_host() { + LOG_PREFIX=3Dhost log $@ } =20 -log_host() { - local testname=3D$1 +log_guest() { + LOG_PREFIX=3Dguest log $@ +} =20 - shift - log "test:${testname}:host" "$@" } =20 -log_guest() { - local testname=3D$1 =20 - shift - log "test:${testname}:guest" "$@" } =20 test_vm_server_host_client() { - local testname=3D"${FUNCNAME[0]#test_}" =20 vm_ssh -- "${VSOCK_TEST}" \ --mode=3Dserver \ --control-port=3D"${TEST_GUEST_PORT}" \ --peer-cid=3D2 \ - 2>&1 | log_guest "${testname}" & + 2>&1 | log_guest & =20 vm_wait_for_listener "${TEST_GUEST_PORT}" =20 @@ -332,18 +333,17 @@ test_vm_server_host_client() { --mode=3Dclient \ --control-host=3D127.0.0.1 \ --peer-cid=3D"${VSOCK_CID}" \ - --control-port=3D"${TEST_HOST_PORT}" 2>&1 | log_host "${testname}" + --control-port=3D"${TEST_HOST_PORT}" 2>&1 | log_host =20 return $? } =20 test_vm_client_host_server() { - local testname=3D"${FUNCNAME[0]#test_}" =20 ${VSOCK_TEST} \ --mode "server" \ --control-port "${TEST_HOST_PORT_LISTENER}" \ - --peer-cid "${VSOCK_CID}" 2>&1 | log_host "${testname}" & + --peer-cid "${VSOCK_CID}" 2>&1 | log_host & =20 host_wait_for_listener =20 @@ -351,19 +351,18 @@ test_vm_client_host_server() { --mode=3Dclient \ --control-host=3D10.0.2.2 \ --peer-cid=3D2 \ - --control-port=3D"${TEST_HOST_PORT_LISTENER}" 2>&1 | log_guest "${testna= me}" + --control-port=3D"${TEST_HOST_PORT_LISTENER}" 2>&1 | log_guest =20 return $? } =20 test_vm_loopback() { - local testname=3D"${FUNCNAME[0]#test_}" local port=3D60000 # non-forwarded local port =20 vm_ssh -- "${VSOCK_TEST}" \ --mode=3Dserver \ --control-port=3D"${port}" \ - --peer-cid=3D1 2>&1 | log_guest "${testname}" & + --peer-cid=3D1 2>&1 | log_guest & =20 vm_wait_for_listener "${port}" =20 @@ -371,7 +370,7 @@ test_vm_loopback() { --mode=3Dclient \ --control-host=3D"127.0.0.1" \ --control-port=3D"${port}" \ - --peer-cid=3D1 2>&1 | log_guest "${testname}" + --peer-cid=3D1 2>&1 | log_guest =20 return $? } @@ -429,7 +428,7 @@ QEMU=3D"qemu-system-$(uname -m)" while getopts :hvsq:b o do case $o in - v) VERBOSE=3D1;; + v) VERBOSE=3D$(( VERBOSE - 1 ));; b) BUILD=3D1;; q) QEMU=3D$OPTARG;; h|*) usage;; @@ -452,10 +451,10 @@ handle_build =20 echo "1..${#ARGS[@]}" =20 -log_setup "Booting up VM" +log_host "Booting up VM" vm_start vm_wait_for_ssh -log_setup "VM booted up" +log_host "VM booted up" =20 cnt_pass=3D0 cnt_fail=3D0 --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (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 1CB992BEC27; Tue, 5 Aug 2025 21:49:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430573; cv=none; b=aLfnZgsuj+BhBa2mVNJdtHGpnFUoDSnwSTGQtmb1dh8gyybx3BPOTgCXMPNjdu3T3X1n59u03Gvxq8rLV5UjbtSyoRZUhraJ/X5GZwIOWyX9lR6GTU4GlAEe8m6wpIrEbo71P6ejYjRIbqTDSHevO1NHtBXqO7pMFJ6zFKZ/dq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430573; c=relaxed/simple; bh=BquwX6HjvEBxZ0NOdjFPMl3JAQrw/BuuZkbNRV5kNDE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J/NIw+2XflmapA4F8d1WCkvyHYFj3aVNWYsDEm3BZaByaXeVostQx9fxzxOkAdVkYT41wLFOcTSuV0H1eScNGkGUrb8uUqcZvVFzkyTA+RXQKwaPbjN9GjTTSO2tiAHARdC/2SBS/l0ccxOD3TOObIJwvmVTVtBdQK1GcXp7Phw= 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=Y4c/cagY; arc=none smtp.client-ip=209.85.215.173 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="Y4c/cagY" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-b424d2eb139so239121a12.1; Tue, 05 Aug 2025 14:49:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430570; x=1755035370; 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=1YyzkIGkPcN4s/5n8XbmWu5wXR7Mhh7fBZ/cTvP3v7E=; b=Y4c/cagYxjV9HTEfY4NFiWhgBMKJTBNicyRpgcNyt1VhOtPMIn/N0GJtDilmTTe6W4 coW6oK+Ako++0z0FAUcQjXJ9grF+tVv+BbyOsy8yvrSk7nVdncKM8DTxVx5Q3G7UcorO cpsFgKDOElHfSey8J0RqAMW1pEmQxJfPa6iS236fGFMLvvXGHd8vi5mluylaLN+NyeV7 zQuqZo/8799ozcXf+7OSRYu6hLumOMQ7Ot8f32JVYQFrG4VrZRQbDRLJQtxz/ZFOqQ1j dwJnqdylAYsWxvypFn9Kmp6YLtHCHz3Jyqm2o5OBDUC0wo3aiZT+loCplKwKXUQnt0Zb 0D4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430570; x=1755035370; 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=1YyzkIGkPcN4s/5n8XbmWu5wXR7Mhh7fBZ/cTvP3v7E=; b=v1ofiwH/MOojlIo+x5JagG87AtuEqBlVFRM41Zqqg/fs2kHrKwYMVwfUWRI5yWwUMj pSeBpni+Yt97H7j1vKDzzLqS5XSYjnLQxtExYWMhsOX3lu2EdDRhy2eoJij4DSzMld0Y 1s+SlK2PRX12bkBEqZzrq4Y6r4VD26NjDijKsXZz7rJjgbPGom9lkEdcvX6q+ATJRIsi 3GKYrAwtUfDcStV945RaBdL9BBA6qvkQx849cIbfNoU3Q7BaZDQ/WhrqtsPCMhx8NHM1 i4UBMYB46IGINs03ESROQKPwO1KXPHI8XJLHZrGBz7CZDyXafOeYxF0PlwFiFaGEeHXt UX8w== X-Forwarded-Encrypted: i=1; AJvYcCUCgm8IrVQYEGU9FKSBIXRzo6zMOiTatvOFTEfIpnmSWOT6byyL97rWNC7WuFQxMqmDDEs10ZAcOhupaXL1@vger.kernel.org, AJvYcCUjLf1JPOLEtCxhAqLLKXK+lCZKbY5ur6Ij1Pr9nkpSs8FFQN1srZEAh7lIUXt1AtNqc66Y3jzx@vger.kernel.org, AJvYcCUjLuBOhGWOGiZbOtTtkaoaoGJAVqJr2rErf1i8GWKCPMr9aeixREzW/HBrYZiIR+xVOz4/+ojNGcvhmaP9@vger.kernel.org, AJvYcCWiGxua6/9uuf9d7SUZvq8Vop/GkDIwtPjbKLaD2HHyRi6YMCQ9rlZjYac4XfyBxxcq5So=@vger.kernel.org, AJvYcCXAP7Hte1OqKZVNnWXX51AP5sFJ+lyF/jXz4AISwR7bqUFtzZrLltHlQwhpM7zaRk2uN1lqDA67aTZsTdDWjcd9@vger.kernel.org X-Gm-Message-State: AOJu0Yzv9wFZkYe8NlvqWhG43GMEU2+HUADKGT+6g+QI4aNDxAI0vwkd RJc+wChAi+pcAicRT/cvEFvpUiE6jnK8V8Elg3jXiVuJNz2VHqwGSrVo X-Gm-Gg: ASbGncsHnfrnKRiXChUrXoI4zyJgvhDLVyBa20fzfrO1Uh2HoYt93/9XJPIIhySYPv3 RRl0EP35gwDBdHSLq3IJyPvtKWbWZMHGo+RHrTZtC5/6Ldcv5kYooAqxzI/kEl1T+4zh6mZJU4q fx9CnZa8bUdwHDFt+ffm0F8YOR4tX5pUq/FdwFMaW0NJpE2k1hErFchRGrlJKiOOpfKW3Kvs7DT layowXuGMrI2/aK7HGOPeeIbvHVtz+W0wXeqyM5zwgTOaT1zol7LRSKQN/YjLQqTQ/podwJdNl/ m+m1eHjc/Ku6fPkfepNGOdS81xx4GDnfAstu2p3Zq1eOpqTr9g6KzhiBJ2qWDNXwLMVAl8O27Yb Fp9lUDewn+A97eilnoPdiwekY+4ZJRUs= X-Google-Smtp-Source: AGHT+IEGF9ILDBnnoknWZKQ2G+wK9h51qA8kxxh5nsU0lZMy+4+a+iHFcBwZmFqZpGGoul2VL5iLww== X-Received: by 2002:a17:90b:2801:b0:312:dbcd:b93d with SMTP id 98e67ed59e1d1-32166a3a19emr474676a91.14.1754430570367; Tue, 05 Aug 2025 14:49:30 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:45::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-31f63ee49e0sm17855734a91.24.2025.08.05.14.49.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:29 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:19 -0700 Subject: [PATCH RFC net-next v4 11/12] selftests/vsock: invoke vsock_test through helpers 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: <20250805-vsock-vmtest-v4-11-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add helper calls vm_vsock_test() and host_vsock_test() to invoke the vsock_test binary. This encapsulates several items of repeat logic, such as waiting for the server to reach listening state and enabling/disabling the bash option pipefail to avoid pipe-style logging from hiding failures. Signed-off-by: Bobby Eshleman --- tools/testing/selftests/vsock/vmtest.sh | 120 ++++++++++++++++++++++++++++= ---- 1 file changed, 108 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/vsock/vmtest.sh b/tools/testing/selfte= sts/vsock/vmtest.sh index 183647a86c8a..5e36d1068f6f 100755 --- a/tools/testing/selftests/vsock/vmtest.sh +++ b/tools/testing/selftests/vsock/vmtest.sh @@ -248,6 +248,7 @@ wait_for_listener() local port=3D$1 local interval=3D$2 local max_intervals=3D$3 + local old_pipefail local protocol=3Dtcp local pattern local i @@ -256,6 +257,13 @@ wait_for_listener() =20 # for tcp protocol additionally check the socket state [ "${protocol}" =3D "tcp" ] && pattern=3D"${pattern}0A" + + # 'grep -q' exits on match, sending SIGPIPE to 'awk', which exits with + # an error, causing the if-condition to fail when pipefail is set. + # Instead, temporarily disable pipefail and restore it later. + old_pipefail=3D$(set -o | awk '/^pipefail[[:space:]]+(on|off)$/{print $2}= ') + set +o pipefail + for i in $(seq "${max_intervals}"); do if awk '{print $2" "$4}' /proc/net/"${protocol}"* | \ grep -q "${pattern}"; then @@ -263,6 +271,10 @@ wait_for_listener() fi sleep "${interval}" done + + if [[ "${old_pipefail}" =3D=3D on ]]; then + set -o pipefail + fi } =20 vm_wait_for_listener() { @@ -314,28 +326,112 @@ log_guest() { LOG_PREFIX=3Dguest log $@ } =20 +vm_vsock_test() { + local ns=3D$1 + local mode=3D$2 + local rc + + set -o pipefail + if [[ "${mode}" =3D=3D client ]]; then + local host=3D$3 + local cid=3D$4 + local port=3D$5 + + # log output and use pipefail to respect vsock_test errors + vm_ssh "${ns}" -- "${VSOCK_TEST}" \ + --mode=3Dclient \ + --control-host=3D"${host}" \ + --peer-cid=3D"${cid}" \ + --control-port=3D"${port}" \ + 2>&1 | log_guest + rc=3D$? + else + local cid=3D$3 + local port=3D$4 + + # log output and use pipefail to respect vsock_test errors + vm_ssh "${ns}" -- "${VSOCK_TEST}" \ + --mode=3Dserver \ + --peer-cid=3D"${cid}" \ + --control-port=3D"${port}" \ + 2>&1 | log_guest & + rc=3D$? + + if [[ $rc -ne 0 ]]; then + set +o pipefail + return $rc + fi + + vm_wait_for_listener "${ns}" "${port}" + rc=3D$? + fi + set +o pipefail + + return $rc } =20 +host_vsock_test() { + local ns=3D$1 + local mode=3D$2 + local cmd + + if [[ "${ns}" =3D=3D none ]]; then + cmd=3D"${VSOCK_TEST}" + else + cmd=3D"ip netns exec ${ns} ${VSOCK_TEST}" + fi + + # log output and use pipefail to respect vsock_test errors + set -o pipefail + if [[ "${mode}" =3D=3D client ]]; then + local host=3D$3 + local cid=3D$4 + local port=3D$5 + + ${cmd} \ + --mode=3D"${mode}" \ + --peer-cid=3D"${cid}" \ + --control-host=3D"${host}" \ + --control-port=3D"${port}" 2>&1 | log_host + rc=3D$? + else + local cid=3D$3 + local port=3D$4 + + ${cmd} \ + --mode=3D"${mode}" \ + --peer-cid=3D"${cid}" \ + --control-port=3D"${port}" 2>&1 | log_host & + rc=3D$? + + if [[ $rc -ne 0 ]]; then + return $rc + fi + + host_wait_for_listener "${ns}" "${port}" "${WAIT_PERIOD}" "${WAIT_PERIOD= _MAX}" + rc=3D$? + fi + set +o pipefail =20 + return $rc } =20 test_vm_server_host_client() { + vm_vsock_test "none" "server" 2 "${TEST_GUEST_PORT}" + host_vsock_test "none" "client" "127.0.0.1" "${VSOCK_CID}" "${TEST_HOST_P= ORT}" +} =20 - vm_ssh -- "${VSOCK_TEST}" \ - --mode=3Dserver \ - --control-port=3D"${TEST_GUEST_PORT}" \ - --peer-cid=3D2 \ - 2>&1 | log_guest & +test_vm_client_host_server() { + host_vsock_test "none" "server" "${VSOCK_CID}" "${TEST_HOST_PORT_LISTENER= }" + vm_vsock_test "none" "client" "10.0.2.2" 2 "${TEST_HOST_PORT_LISTENER}" +} =20 - vm_wait_for_listener "${TEST_GUEST_PORT}" +test_vm_loopback() { + vm_vsock_test "none" "server" 1 "${TEST_HOST_PORT_LISTENER}" + vm_vsock_test "none" "client" "127.0.0.1" 1 "${TEST_HOST_PORT_LISTENER}" +} =20 - ${VSOCK_TEST} \ - --mode=3Dclient \ - --control-host=3D127.0.0.1 \ - --peer-cid=3D"${VSOCK_CID}" \ - --control-port=3D"${TEST_HOST_PORT}" 2>&1 | log_host =20 - return $? } =20 test_vm_client_host_server() { --=20 2.47.3 From nobody Sun Oct 5 10:45:20 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 178302BEC42; Tue, 5 Aug 2025 21:49:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430576; cv=none; b=SIzQSLHtFdV9RKfO15gXaw4K5qoA+e4xFOo2LQdxr65fjtflkRBFsVoJdnWqQODVQRqaJagf1I1T8xRz2n7Wj9oPUBD4pzD6nnV701uQxBl4/feFSSHgEtPRQDpgJ9t4me/jFLXWBE6aK+xYTLuJeyjKovfutG+aSaCt09SCnzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754430576; c=relaxed/simple; bh=fNrIdqinZO6meH603K/qrrZle5WkjJLCl4UMxEe7U40=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u75PmPnSsg3Jxy1BVHAbf2txlRDBA6Rk+IfYsyUy0k16rkCU3vGvdr4LfJFrTye/GuRVm6VjETXzBK9VHcIElSVtG9worWDKuk9yRo0jbi9ATkZtXXNgIiaUKuTkZPPLVBQzSN2mzj2Y/fBzS1PE/roZYyO8yisMPW0JDeaYcis= 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=M1gwQOdz; arc=none smtp.client-ip=209.85.210.175 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="M1gwQOdz" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-76bde897110so3926246b3a.3; Tue, 05 Aug 2025 14:49:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754430572; x=1755035372; 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=izmARF5vDTSFngUewoMatnW4l+7tAAEaXOAkNW/rQbo=; b=M1gwQOdzOZv7uuiI5YAWPeedO96HOZFxhHDfnL84WNg1O0VFG3uMhg9pE5hXdmW6KK L0fPkFr3/zxRhoAYBoMessKzC5u8FXe5pmnTD9Dy7GnvMGyd266KK3L49YdEqn8oaRDI ZduO3DWe8uhwOHl+BGnr7GZPpHeh4Fq2rkPeQiUikAyXhqCZvkx4z7hfPOcZEZyIrhzZ tCYzDLffStYBCfDwYYnpZbOglJ9kF3kmU/u+Eb7fMVx8k3iqj8DKbGdsRxjmDY/9yYMk 95iY5QUV/GKUqJebZxB8eMATocLAkP/rmdLOLc1UOVmIxwT8e3WsNJIIsi4p/G/KTxZk HjpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754430572; x=1755035372; 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=izmARF5vDTSFngUewoMatnW4l+7tAAEaXOAkNW/rQbo=; b=sm1brQu4cLtZ4nqpQ/EFV3kN0j2lZiY2t/t11pJPePA0rqpAbg5i2aXjJE+aVS1opu prbstbY+CkkoyGEEtgSeMvNYbdJniKECVL/BAZnbmfDJXrCszzVMlTV9KvGic0nBLATK g1njOV+OCdMYK0ZUOD1gUIHJ7/2kAxd3VlCmR9LfmvpznhkEFEk/pQMUOVmHwRn+xyKm 9OONMnjdZezAyiU7iteQcIvVD6Q5Q7qGr5TeZySBtj9bUwj0o+ifx+HFxONrl0NYbPVz BMeD4CYaBlsFBhcuLbvmU7h2pdFqBV/HeEKKiVepjTDajHeTDVJaFHdWgXeTAg/K/UoR k7bA== X-Forwarded-Encrypted: i=1; AJvYcCVJkrAUZ3IbMaF9boD5VvTjAEjo0JJah1TZ/GabmvsTZ3OmNoTxPcxalzy6XlTgpmScM9O51qcE@vger.kernel.org, AJvYcCVij9RIeMxuDS1THIwezJyl5e1OUjFVZhOMOIo6Og4udWvPeYP8wYOfxeUVuUA8JZ5bZ7o=@vger.kernel.org, AJvYcCWMipthnD1rOJOpBqka0cdDthVvF55mOFCjCI2aXc6ZbOjokIMnmBa5pexmAeGWgpfhx8vtqrlfkYKngOGy@vger.kernel.org, AJvYcCX3D6jDCis7n+ub/MUKLccwxLwwJ6YkbYPEs3IBp+sz0jsRiHKdoeOR2yp1XG+t4ZPKLWRs4pmBD+TK66uGTBC1@vger.kernel.org, AJvYcCXCrVlfOfBJ+8DcZoKnDTzeWdQMYxb2Qew1aDfwPxGSFWk8WffpiFDWKfC3hNHM4Cj4lpg+lvOJJ9/Wu6Xo@vger.kernel.org X-Gm-Message-State: AOJu0YzJE9n6aDZRkSsTFI3YQ7st3R7HhF4V07G9Ow6bMz1NUvquRirM Ih+e2iCtURVAXwtaIcppjFt7Yv6VKjO1edA9GnHLoLvbf6jPYy+bnBDZ X-Gm-Gg: ASbGncsF01nwG5colBKO0OdpYSwGRwNlGIE1JiEKTUS/vlEYMW4ExFHLj9YKa1RdMGT ET+LShQql+JERTNaXdNdNURlP6nIszsvEeaRIVSfwlNPCN6O8Pixcrfu1w9uM/v1zl86QH8WLsD 4LaCDWVqj+9tIVPYE9+VoR4Ng/zuZpy0bhxPdqIptV4MTZvEYZKjFChvAhP61HwiC9q5ibpeJR2 QT+uUzrqgLEp3MuZ/rjFjDT+wxUAGFp6+im3sKVE+u6KfleqhZeUWW4AemTxbGMtzajWhpZlQzf mn8gpRzRAfi2e+Xyae0j5sEkKUXKDV33lvldWZzwk05wIyhqPHDs/wQgte6hDSb8CRxhcY3Si6T HT1Hn9nMMANtpT+rsWG6qd0V/QgWRxv4= X-Google-Smtp-Source: AGHT+IHlgUOTg8mimzN/nBxyRnQesTFXS3T26vmjgdBg8lTXuPO7qMzncLOriqo0zFdq1xJMu6rHMA== X-Received: by 2002:a05:6a00:2e28:b0:76b:fcac:f2ad with SMTP id d2e1a72fcca58-76c2b078be9mr372225b3a.20.1754430572147; Tue, 05 Aug 2025 14:49:32 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:42::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76be2f2a4c2sm10825112b3a.110.2025.08.05.14.49.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Aug 2025 14:49:31 -0700 (PDT) From: Bobby Eshleman Date: Tue, 05 Aug 2025 14:49:20 -0700 Subject: [PATCH RFC net-next v4 12/12] selftests/vsock: add namespace tests 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: <20250805-vsock-vmtest-v4-12-059ec51ab111@meta.com> References: <20250805-vsock-vmtest-v4-0-059ec51ab111@meta.com> In-Reply-To: <20250805-vsock-vmtest-v4-0-059ec51ab111@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 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, Bobby Eshleman , berrange@redhat.com, Bobby Eshleman X-Mailer: b4 0.13.0 From: Bobby Eshleman Add tests for namespace support in vsock. Use socat for basic connection failure tests and vsock_test for full functionality tests when communication is expected to succeed. vsock_test is not used for failure cases because in theory vsock_test could allow connection and some traffic flow but fail on some other case (e.g., fail on MSG_ZEROCOPY). Tests cover all cases of clients and servers being in all variants of local ns, global ns, host process, and VM process. Legacy tests are retained and executed in the init ns. Signed-off-by: Bobby Eshleman --- tools/testing/selftests/vsock/vmtest.sh | 909 ++++++++++++++++++++++++++++= ---- 1 file changed, 804 insertions(+), 105 deletions(-) diff --git a/tools/testing/selftests/vsock/vmtest.sh b/tools/testing/selfte= sts/vsock/vmtest.sh index 5e36d1068f6f..72cebeebf218 100755 --- a/tools/testing/selftests/vsock/vmtest.sh +++ b/tools/testing/selftests/vsock/vmtest.sh @@ -7,6 +7,7 @@ # * virtme-ng # * busybox-static (used by virtme-ng) # * qemu (used by virtme-ng) +# * socat =20 readonly SCRIPT_DIR=3D"$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && p= wd -P)" readonly KERNEL_CHECKOUT=3D$(realpath "${SCRIPT_DIR}"/../../../../) @@ -23,7 +24,7 @@ readonly VSOCK_CID=3D1234 readonly WAIT_PERIOD=3D3 readonly WAIT_PERIOD_MAX=3D60 readonly WAIT_TOTAL=3D$(( WAIT_PERIOD * WAIT_PERIOD_MAX )) -readonly QEMU_PIDFILE=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) +readonly WAIT_QEMU=3D5 =20 # virtme-ng offers a netdev for ssh when using "--ssh", but we also need a # control port forwarded for vsock_test. Because virtme-ng doesn't support @@ -33,23 +34,125 @@ readonly QEMU_PIDFILE=3D$(mktemp /tmp/qemu_vsock_vmtes= t_XXXX.pid) # add the kernel cmdline options that virtme-init uses to setup the interf= ace. readonly QEMU_TEST_PORT_FWD=3D"hostfwd=3Dtcp::${TEST_HOST_PORT}-:${TEST_GU= EST_PORT}" readonly QEMU_SSH_PORT_FWD=3D"hostfwd=3Dtcp::${SSH_HOST_PORT}-:${SSH_GUEST= _PORT}" -readonly QEMU_OPTS=3D"\ - -netdev user,id=3Dn0,${QEMU_TEST_PORT_FWD},${QEMU_SSH_PORT_FWD} \ - -device virtio-net-pci,netdev=3Dn0 \ - -device vhost-vsock-pci,guest-cid=3D${VSOCK_CID} \ - --pidfile ${QEMU_PIDFILE} \ -" readonly KERNEL_CMDLINE=3D"\ virtme.dhcp net.ifnames=3D0 biosdevname=3D0 \ virtme.ssh virtme_ssh_channel=3Dtcp virtme_ssh_user=3D$USER \ " readonly LOG=3D$(mktemp /tmp/vsock_vmtest_XXXX.log) -readonly TEST_NAMES=3D(vm_server_host_client vm_client_host_server vm_loop= back) +readonly TEST_NAMES=3D( + vm_server_host_client + vm_client_host_server + vm_loopback + host_vsock_ns_mode_ok + host_vsock_ns_mode_write_once_ok + global_same_cid_fails + local_same_cid_ok + global_local_same_cid_ok + local_global_same_cid_ok + diff_ns_global_host_connect_to_global_vm_ok + diff_ns_global_host_connect_to_local_vm_fails + diff_ns_global_vm_connect_to_global_host_ok + diff_ns_global_vm_connect_to_local_host_fails + diff_ns_local_host_connect_to_local_vm_fails + diff_ns_local_vm_connect_to_local_host_fails + diff_ns_global_to_local_loopback_local_fails + diff_ns_local_to_global_loopback_fails + diff_ns_local_to_local_loopback_fails + diff_ns_global_to_global_loopback_ok + same_ns_local_loopback_ok + same_ns_local_host_connect_to_local_vm_ok + same_ns_local_vm_connect_to_local_host_ok +) + readonly TEST_DESCS=3D( + # vm_server_host_client "Run vsock_test in server mode on the VM and in client mode on the host." + + # vm_client_host_server "Run vsock_test in client mode on the VM and in server mode on the host." + + # vm_loopback "Run vsock_test using the loopback transport in the VM." + + # host_vsock_ns_mode_ok + "Check /proc/net/vsock_ns_mode strings on the host." + + # host_vsock_ns_mode_write_once_ok + "Check /proc/net/vsock_ns_mode is write-once on the host." + + # global_same_cid_fails + "Check QEMU fails to start two VMs with same CID in two different global = namespaces." + + # local_same_cid_ok + "Check QEMU successfully starts two VMs with same CID in two different lo= cal namespaces." + + # 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." + + # 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." + + # diff_ns_global_host_connect_to_global_vm_ok + "Run vsock_test client in global ns with server in VM in another global n= s." + + # diff_ns_global_host_connect_to_local_vm_fails + "Run socat to test a process in a global ns fails to connect to a VM in a= local ns." + + # diff_ns_global_vm_connect_to_global_host_ok + "Run vsock_test client in VM in a global ns with server in another global= ns." + + # diff_ns_global_vm_connect_to_local_host_fails + "Run socat to test a VM in a global ns fails to connect to a host process= in a local ns." + + # diff_ns_local_host_connect_to_local_vm_fails + "Run socat to test a host process in a local ns fails to connect to a VM = in another local ns." + + # diff_ns_local_vm_connect_to_local_host_fails + "Run socat to test a VM in a local ns fails to connect to a host process = in another local ns." + + # diff_ns_global_to_local_loopback_local_fails + "Run socat to test a loopback vsock in a global ns fails to connect to a = vsock in a local ns." + + # diff_ns_local_to_global_loopback_fails + "Run socat to test a loopback vsock in a local ns fails to connect to a v= sock in a global ns." + + # diff_ns_local_to_local_loopback_fails + "Run socat to test a loopback vsock in a local ns fails to connect to a v= sock in another local ns." + + # diff_ns_global_to_global_loopback_ok + "Run socat to test a loopback vsock in a global ns successfuly connects t= o a vsock in another global ns." + + # same_ns_local_loopback_ok + "Run socat to test a loopback vsock in a local ns successfuly connects to= a vsock in the same ns." + + # same_ns_local_host_connect_to_local_vm_ok + "Run vsock_test client in a local ns with server in VM in same ns." + + # same_ns_local_vm_connect_to_local_host_ok + "Run vsock_test client in VM in a local ns with server in same ns." +) + +readonly USE_SHARED_VM=3D(vm_server_host_client vm_client_host_server vm_l= oopback) +readonly USE_INIT_NETNS=3D( + global_same_cid_fails + local_same_cid_ok + global_local_same_cid_ok + local_global_same_cid_ok + diff_ns_global_host_connect_to_global_vm_ok + diff_ns_global_host_connect_to_local_vm_fails + diff_ns_global_vm_connect_to_global_host_ok + diff_ns_global_vm_connect_to_local_host_fails + diff_ns_local_host_connect_to_local_vm_fails + diff_ns_local_vm_connect_to_local_host_fails + diff_ns_global_to_local_loopback_local_fails + diff_ns_local_to_global_loopback_fails + diff_ns_local_to_local_loopback_fails + diff_ns_global_to_global_loopback_ok + same_ns_local_loopback_ok + same_ns_local_host_connect_to_local_vm_ok + same_ns_local_vm_connect_to_local_host_ok ) +readonly MODES=3D("local" "global") =20 readonly LOG_LEVEL_DEBUG=3D0 readonly LOG_LEVEL_INFO=3D1 @@ -58,6 +161,12 @@ readonly LOG_LEVEL_ERROR=3D3 =20 VERBOSE=3D"${LOG_LEVEL_WARN}" =20 +# Test pass/fail counters +cnt_pass=3D0 +cnt_fail=3D0 +cnt_skip=3D0 +cnt_total=3D0 + usage() { local name local desc @@ -77,7 +186,7 @@ usage() { for ((i =3D 0; i < ${#TEST_NAMES[@]}; i++)); do name=3D${TEST_NAMES[${i}]} desc=3D${TEST_DESCS[${i}]} - printf "\t%-35s%-35s\n" "${name}" "${desc}" + printf "\t%-55s%-35s\n" "${name}" "${desc}" done echo =20 @@ -89,21 +198,87 @@ die() { exit "${KSFT_FAIL}" } =20 +add_namespaces() { + # add namespaces local0, local1, global0, and global1 + for mode in "${MODES[@]}"; do + ip netns add "${mode}0" 2>/dev/null + ip netns add "${mode}1" 2>/dev/null + done +} + +init_namespaces() { + for mode in "${MODES[@]}"; do + ns_set_mode "${mode}0" "${mode}" + ns_set_mode "${mode}1" "${mode}" + + log_host "set ns ${mode}0 to mode ${mode}" + log_host "set ns ${mode}1 to mode ${mode}" + + # we need lo for qemu port forwarding + ip netns exec "${mode}0" ip link set dev lo up + ip netns exec "${mode}1" ip link set dev lo up + done +} + +del_namespaces() { + for mode in "${MODES[@]}"; do + ip netns del "${mode}0" + ip netns del "${mode}1" + log_host "removed ns ${mode}0" + log_host "removed ns ${mode}1" + done &>/dev/null +} + +ns_set_mode() { + local ns=3D$1 + local mode=3D$2 + + echo "${mode}" | ip netns exec "${ns}" \ + tee /proc/net/vsock_ns_mode &>/dev/null +} + vm_ssh() { - ssh -q -o UserKnownHostsFile=3D/dev/null -p ${SSH_HOST_PORT} localhost "$= @" + local ns_exec + + if [[ "${1}" =3D=3D none ]]; then + local ns_exec=3D"" + else + local ns_exec=3D"ip netns exec ${1}" + fi + + shift + + ${ns_exec} ssh -q -o UserKnownHostsFile=3D/dev/null -p ${SSH_HOST_PORT} l= ocalhost $* + return $? } =20 cleanup() { - if [[ -s "${QEMU_PIDFILE}" ]]; then - pkill -SIGTERM -F "${QEMU_PIDFILE}" > /dev/null 2>&1 - fi + del_namespaces +} =20 - # If failure occurred during or before qemu start up, then we need - # to clean this up ourselves. - if [[ -e "${QEMU_PIDFILE}" ]]; then - rm "${QEMU_PIDFILE}" - fi +terminate_pidfiles() { + local pidfile + + for pidfile in "$@"; do + if [[ -s "${pidfile}" ]]; then + pkill -SIGTERM -F "${pidfile}" 2>&1 > /dev/null + fi + + # If failure occurred during or before qemu start up, then we need + # to clean this up ourselves. + if [[ -e "${pidfile}" ]]; then + rm -f "${pidfile}" + fi + done +} + +terminate_pids() { + local pid + + for pid in "$@"; do + kill -SIGTERM "${pid}" &>/dev/null || : + done } =20 check_args() { @@ -133,7 +308,7 @@ check_args() { } =20 check_deps() { - for dep in vng ${QEMU} busybox pkill ssh; do + for dep in vng ${QEMU} busybox pkill ssh socat; do if [[ ! -x $(command -v "${dep}") ]]; then echo -e "skip: dependency ${dep} not found!\n" exit "${KSFT_SKIP}" @@ -170,6 +345,20 @@ check_vng() { fi } =20 +check_socat() { + local support_string + + support_string=3D"$(socat -V)" + + if [[ "${support_string}" !=3D *"WITH_VSOCK 1"* ]]; then + die "err: socat is missing vsock support" + fi + + if [[ "${support_string}" !=3D *"WITH_UNIX 1"* ]]; then + die "err: socat is missing unix support" + fi +} + handle_build() { if [[ ! "${BUILD}" -eq 1 ]]; then return @@ -194,9 +383,14 @@ handle_build() { } =20 vm_start() { + local cid=3D$1 + local ns=3D$2 + local pidfile=3D$3 local logfile=3D/dev/null local verbose_opt=3D"" + local qemu_opts=3D"" local kernel_opt=3D"" + local ns_exec=3D"" local qemu =20 qemu=3D$(command -v "${QEMU}") @@ -206,27 +400,37 @@ vm_start() { logfile=3D/dev/stdout fi =20 + qemu_opts=3D"\ + -netdev user,id=3Dn0,${QEMU_TEST_PORT_FWD},${QEMU_SSH_PORT_FWD} \ + -device virtio-net-pci,netdev=3Dn0 \ + ${QEMU_OPTS} -device vhost-vsock-pci,guest-cid=3D${cid} \ + --pidfile ${pidfile} + " + if [[ "${BUILD}" -eq 1 ]]; then kernel_opt=3D"${KERNEL_CHECKOUT}" fi =20 - vng \ + if [[ "${ns}" !=3D "none" ]]; then + ns_exec=3D"ip netns exec ${ns}" + fi + + ${ns_exec} vng \ --run \ ${kernel_opt} \ ${verbose_opt} \ - --qemu-opts=3D"${QEMU_OPTS}" \ + --qemu-opts=3D"${qemu_opts}" \ --qemu=3D"${qemu}" \ --user root \ --append "${KERNEL_CMDLINE}" \ --rw &> ${logfile} & =20 - if ! timeout ${WAIT_TOTAL} \ - bash -c 'while [[ ! -s '"${QEMU_PIDFILE}"' ]]; do sleep 1; done; exit 0'= ; then - die "failed to boot VM" - fi + timeout "${WAIT_QEMU}" \ + bash -c 'while [[ ! -s '"${pidfile}"' ]]; do sleep 1; done; exit 0' } =20 vm_wait_for_ssh() { + local ns=3D$1 local i =20 i=3D0 @@ -234,7 +438,8 @@ vm_wait_for_ssh() { if [[ ${i} -gt ${WAIT_PERIOD_MAX} ]]; then die "Timed out waiting for guest ssh" fi - if vm_ssh -- true; then + + if vm_ssh "${ns}" -- true; then break fi i=3D$(( i + 1 )) @@ -269,6 +474,7 @@ wait_for_listener() grep -q "${pattern}"; then break fi + sleep "${interval}" done =20 @@ -278,17 +484,29 @@ wait_for_listener() } =20 vm_wait_for_listener() { - local port=3D$1 + local ns=3D$1 + local port=3D$2 + + log "Waiting for listener on port ${port} on vm" =20 - vm_ssh <&1 | log_host & + for mode in "${MODES[@]}"; do + local ns=3D"${mode}0" + if ! ns_set_mode "${ns}" "${mode}"; then + del_namespaces + return "${KSFT_FAIL}" + fi =20 - host_wait_for_listener + # try writing again and expect failure + if ns_set_mode "${ns}" "${mode}"; then + del_namespaces + return "${KSFT_FAIL}" + fi + done =20 - vm_ssh -- "${VSOCK_TEST}" \ - --mode=3Dclient \ - --control-host=3D10.0.2.2 \ - --peer-cid=3D2 \ - --control-port=3D"${TEST_HOST_PORT_LISTENER}" 2>&1 | log_guest + del_namespaces =20 - return $? + return "${KSFT_PASS}" } =20 -test_vm_loopback() { - local port=3D60000 # non-forwarded local port +namespaces_can_boot_same_cid() { + local ns0=3D$1 + local ns1=3D$2 + local pidfile1 pidfile2 + local cid=3D20 + readonly cid + local rc =20 - vm_ssh -- "${VSOCK_TEST}" \ - --mode=3Dserver \ - --control-port=3D"${port}" \ - --peer-cid=3D1 2>&1 | log_guest & + pidfile1=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + vm_start "${cid}" "${ns0}" "${pidfile1}" =20 - vm_wait_for_listener "${port}" + pidfile2=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + vm_start "${cid}" "${ns1}" "${pidfile2}" =20 - vm_ssh -- "${VSOCK_TEST}" \ - --mode=3Dclient \ - --control-host=3D"127.0.0.1" \ - --control-port=3D"${port}" \ - --peer-cid=3D1 2>&1 | log_guest + rc=3D$? + terminate_pidfiles "${pidfile1}" "${pidfile2}" =20 - return $? + return $rc +} + +test_global_same_cid_fails() { + if namespaces_can_boot_same_cid "global0" "global1"; then + return "${KSFT_FAIL}" + fi + + return "${KSFT_PASS}" +} + +test_local_global_same_cid_ok() { + if namespaces_can_boot_same_cid "local0" "global0"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_global_local_same_cid_ok() { + if namespaces_can_boot_same_cid "global0" "local0"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_local_same_cid_ok() { + if namespaces_can_boot_same_cid "local0" "local0"; then + return "${KSFT_FAIL}" + fi + + return "${KSFT_PASS}" +} + +test_diff_ns_global_host_connect_to_global_vm_ok() { + local pids pid pidfile + local ns0 ns1 port + declare -a pids + local unixfile + ns0=3D"global0" + ns1=3D"global1" + port=3D1234 + local rc + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + + if ! vm_start "${VSOCK_CID}" "${ns0}" "${pidfile}"; then + return "${KSFT_FAIL}" + fi + + unixfile=3D$(mktemp -u /tmp/XXXX.sock) + ip netns exec "${ns1}" \ + socat TCP-LISTEN:"${TEST_HOST_PORT}",fork \ + UNIX-CONNECT:"${unixfile}" & + pids+=3D($!) + host_wait_for_listener "${ns1}" "${TEST_HOST_PORT}" + + ip netns exec "${ns0}" socat UNIX-LISTEN:"${unixfile}",fork \ + TCP-CONNECT:localhost:"${TEST_HOST_PORT}" & + pids+=3D($!) + + vm_vsock_test "${ns0}" "server" 2 "${TEST_GUEST_PORT}" + vm_wait_for_listener "${ns0}" "${TEST_GUEST_PORT}" + host_vsock_test "${ns1}" "client" "127.0.0.1" "${VSOCK_CID}" "${TEST_HOST= _PORT}" + rc=3D$? + + for pid in "${pids[@]}"; do + if [[ "$(jobs -p)" =3D *"${pid}"* ]]; then + kill -SIGTERM "${pid}" &>/dev/null + fi + done + + terminate_pidfiles "${pidfile}" + + if [[ $rc -ne 0 ]]; then + return "${KSFT_FAIL}" + fi + + return "${KSFT_PASS}" } =20 -run_test() { +test_diff_ns_global_host_connect_to_local_vm_fails() { + local ns0=3D"global0" + local ns1=3D"local0" + local port=3D12345 + local pidfile + local result + local pid + + outfile=3D$(mktemp) + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + if ! vm_start "${VSOCK_CID}" "${ns1}" "${pidfile}"; then + log_host "failed to start vm (cid=3D${VSOCK_CID}, ns=3D${ns0})" + return $KSFT_FAIL + fi + + vm_wait_for_ssh "${ns1}" + vm_ssh "${ns1}" -- socat VSOCK-LISTEN:"${port}" STDOUT > "${outfile}" & + echo TEST | ip netns exec "${ns0}" \ + socat STDIN VSOCK-CONNECT:"${VSOCK_CID}":"${port}" 2>/dev/null + + terminate_pidfiles "${pidfile}" + + result=3D$(cat "${outfile}") + rm -f "${outfile}" + + if [[ "${result}" !=3D TEST ]]; then + return $KSFT_PASS + fi + + return $KSFT_FAIL +} + +test_diff_ns_global_vm_connect_to_global_host_ok() { + local ns0=3D"global0" + local ns1=3D"global1" + local port=3D12345 + local unixfile + local pidfile + local pids + + declare -a pids + + log_host "Setup socat bridge from ns ${ns0} to ns ${ns1} over port ${port= }" + + unixfile=3D$(mktemp -u /tmp/XXXX.sock) + + ip netns exec "${ns0}" \ + socat TCP-LISTEN:"${port}" UNIX-CONNECT:"${unixfile}" & + pids+=3D($!) + + ip netns exec "${ns1}" \ + socat UNIX-LISTEN:"${unixfile}" TCP-CONNECT:127.0.0.1:"${port}" & + pids+=3D($!) + + log_host "Launching ${VSOCK_TEST} in ns ${ns1}" + host_vsock_test "${ns1}" "server" "${VSOCK_CID}" "${port}" + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + if ! vm_start "${VSOCK_CID}" "${ns0}" "${pidfile}"; then + log_host "failed to start vm (cid=3D${cid}, ns=3D${ns0})" + terminate_pids "${pids[@]}" + rm -f "${unixfile}" + return $KSFT_FAIL + fi + + vm_wait_for_ssh "${ns0}" + vm_vsock_test "${ns0}" "client" "10.0.2.2" 2 "${port}" + rc=3D$? + + terminate_pidfiles "${pidfile}" + terminate_pids "${pids[@]}" + rm -f "${unixfile}" + + if [[ ! $rc -eq 0 ]]; then + return "${KSFT_FAIL}" + fi + + return "${KSFT_PASS}" + +} + +test_diff_ns_global_vm_connect_to_local_host_fails() { + local ns0=3D"global0" + local ns1=3D"local0" + local port=3D12345 + local pidfile + local result + local pid + + log_host "Launching socat in ns ${ns1}" + outfile=3D$(mktemp) + ip netns exec "${ns1}" socat VSOCK-LISTEN:${port} STDOUT &> "${outfile}" & + pid=3D$! + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + if ! vm_start "${VSOCK_CID}" "${ns0}" "${pidfile}"; then + log_host "failed to start vm (cid=3D${cid}, ns=3D${ns0})" + terminate_pids "${pid}" + rm -f "${outfile}" + return $KSFT_FAIL + fi + + vm_wait_for_ssh "${ns0}" + + vm_ssh "${ns0}" -- \ + bash -c "echo TEST | socat STDIN VSOCK-CONNECT:2:${port}" 2>&1 | log_gue= st + + terminate_pidfiles "${pidfile}" + terminate_pids "${pid}" + + result=3D$(cat "${outfile}") + rm -f "${outfile}" + + if [[ "${result}" !=3D TEST ]]; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_diff_ns_local_host_connect_to_local_vm_fails() { + local ns0=3D"local0" + local ns1=3D"local1" + local port=3D12345 + local pidfile + local result + local pid + + outfile=3D$(mktemp) + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + if ! vm_start "${VSOCK_CID}" "${ns1}" "${pidfile}"; then + log_host "failed to start vm (cid=3D${cid}, ns=3D${ns0})" + return $KSFT_FAIL + fi + + vm_wait_for_ssh "${ns1}" + vm_ssh "${ns1}" -- socat VSOCK-LISTEN:"${port}" STDOUT > "${outfile}" & + echo TEST | ip netns exec "${ns0}" \ + socat STDIN VSOCK-CONNECT:"${VSOCK_CID}":"${port}" 2>/dev/null + + terminate_pidfiles "${pidfile}" + + result=3D$(cat "${outfile}") + rm -f "${outfile}" + + if [[ "${result}" !=3D TEST ]]; then + return $KSFT_PASS + fi + + return $KSFT_FAIL +} + +test_diff_ns_local_vm_connect_to_local_host_fails() { + local ns0=3D"local0" + local ns1=3D"local1" + local port=3D12345 + local pidfile + local result + local pid + + log_host "Launching socat in ns ${ns1}" + outfile=3D$(mktemp) + ip netns exec "${ns1}" socat VSOCK-LISTEN:"${port}" STDOUT &> "${outfile}= " & + pid=3D$! + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + if ! vm_start "${VSOCK_CID}" "${ns0}" "${pidfile}"; then + log_host "failed to start vm (cid=3D${cid}, ns=3D${ns0})" + rm -f "${outfile}" + return "${KSFT_FAIL}" + fi + + vm_wait_for_ssh "${ns0}" + + vm_ssh "${ns0}" -- \ + bash -c "echo TEST | socat STDIN VSOCK-CONNECT:2:${port}" 2>&1 | log_gue= st + + terminate_pidfiles "${pidfile}" + terminate_pids "${pid}" + + result=3D$(cat "${outfile}") + rm -f "${outfile}" + + if [[ "${result}" !=3D TEST ]]; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +__test_loopback_two_netns() { + local ns0=3D$1 + local ns1=3D$2 + local port=3D12345 + local result + local pid + + log_host "Launching socat in ns ${ns1}" + outfile=3D$(mktemp) + ip netns exec "${ns1}" socat VSOCK-LISTEN:"${port}" STDOUT > "${outfile}"= 2>/dev/null & + pid=3D$! + + log_host "Launching socat in ns ${ns0}" + echo TEST | ip netns exec "${ns0}" socat STDIN VSOCK-CONNECT:1:"${port}" = 2>/dev/null + terminate_pids "${pid}" + + result=3D$(cat "${outfile}") + rm -f "${outfile}" + + if [[ "${result}" =3D=3D TEST ]]; then + return 0 + fi + + return 1 +} + +test_diff_ns_global_to_local_loopback_local_fails() { + if ! __test_loopback_two_netns "global0" "local0"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_diff_ns_local_to_global_loopback_fails() { + if ! __test_loopback_two_netns "local0" "global0"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_diff_ns_local_to_local_loopback_fails() { + if ! __test_loopback_two_netns "local0" "local1"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_diff_ns_global_to_global_loopback_ok() { + if __test_loopback_two_netns "global0" "global1"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_same_ns_local_loopback_ok() { + if __test_loopback_two_netns "local0" "local0"; then + return "${KSFT_PASS}" + fi + + return "${KSFT_FAIL}" +} + +test_same_ns_local_host_connect_to_local_vm_ok() { + local ns=3D"local0" + local port=3D1234 + local pidfile + local rc + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + + if ! vm_start "${VSOCK_CID}" "${ns}" "${pidfile}"; then + return "${KSFT_FAIL}" + fi + + vm_vsock_test "${ns}" "server" 2 "${TEST_GUEST_PORT}" + host_vsock_test "${ns}" "client" "127.0.0.1" "${VSOCK_CID}" "${TEST_HOST_= PORT}" + rc=3D$? + + terminate_pidfiles "${pidfile}" + + if [[ $rc -ne 0 ]]; then + return "${KSFT_FAIL}" + fi + + return "${KSFT_PASS}" +} + +test_same_ns_local_vm_connect_to_local_host_ok() { + local ns=3D"local0" + local port=3D1234 + local pidfile + local rc + + pidfile=3D$(mktemp /tmp/qemu_vsock_vmtest_XXXX.pid) + + if ! vm_start "${VSOCK_CID}" "${ns}" "${pidfile}"; then + return "${KSFT_FAIL}" + fi + + vm_vsock_test "${ns}" "server" 2 "${TEST_GUEST_PORT}" + host_vsock_test "${ns}" "client" "127.0.0.1" "${VSOCK_CID}" "${TEST_HOST_= PORT}" + rc=3D$? + + terminate_pidfiles "${pidfile}" + + if [[ $rc -ne 0 ]]; then + return "${KSFT_FAIL}" + fi + + return "${KSFT_PASS}" +} + +shared_vm_test() { + local tname + + tname=3D"${1}" + + for testname in "${USE_SHARED_VM[@]}"; do + if [[ "${tname}" =3D=3D "${testname}" ]]; then + return 0 + fi + done + + return 1 +} + + +init_netns_test() { + local tname + + tname=3D"${1}" + + for testname in "${USE_INIT_NETNS[@]}"; do + if [[ "${tname}" =3D=3D "${testname}" ]]; then + return 0 + fi + done + + return 1 +} + +check_result() { + local rc num + + rc=3D$1 + num=3D$(( cnt_total + 1 )) + + if [[ ${rc} -eq $KSFT_PASS ]]; then + cnt_pass=3D$(( cnt_pass + 1 )) + echo "ok ${num} ${arg}" + elif [[ ${rc} -eq $KSFT_SKIP ]]; then + cnt_skip=3D$(( cnt_skip + 1 )) + echo "ok ${num} ${arg} # SKIP" + elif [[ ${rc} -eq $KSFT_FAIL ]]; then + cnt_fail=3D$(( cnt_fail + 1 )) + echo "not ok ${num} ${arg} # exit=3D$rc" + fi + + cnt_total=3D$(( cnt_total + 1 )) +} + +run_shared_vm_tests() { + local start_shared_vm pidfile local host_oops_cnt_before local host_warn_cnt_before local vm_oops_cnt_before @@ -483,40 +1153,90 @@ run_test() { local name local rc =20 - host_oops_cnt_before=3D$(dmesg | grep -c -i 'Oops') - host_warn_cnt_before=3D$(dmesg --level=3Dwarn | wc -l) - vm_oops_cnt_before=3D$(vm_ssh -- dmesg | grep -c -i 'Oops') - vm_warn_cnt_before=3D$(vm_ssh -- dmesg --level=3Dwarn | wc -l) + start_shared_vm=3D0 =20 - name=3D$(echo "${1}" | awk '{ print $1 }') - eval test_"${name}" - rc=3D$? + for arg in "${ARGS[@]}"; do + if shared_vm_test "${arg}"; then + start_shared_vm=3D1 + break + fi + done =20 - host_oops_cnt_after=3D$(dmesg | grep -i 'Oops' | wc -l) - if [[ ${host_oops_cnt_after} -gt ${host_oops_cnt_before} ]]; then - echo "FAIL: kernel oops detected on host" | log_host "${name}" - rc=3D$KSFT_FAIL + pidfile=3D"" + if [[ "${start_shared_vm}" =3D=3D 1 ]]; then + pidfile=3D$(mktemp $PIDFILE_TEMPLATE) + log_host "Booting up VM" + vm_start "${VSOCK_CID}" "none" "${pidfile}" + vm_wait_for_ssh "none" + log_host "VM booted up" fi =20 - host_warn_cnt_after=3D$(dmesg --level=3Dwarn | wc -l) - if [[ ${host_warn_cnt_after} -gt ${host_warn_cnt_before} ]]; then - echo "FAIL: kernel warning detected on host" | log_host "${name}" - rc=3D$KSFT_FAIL - fi + for arg in "${ARGS[@]}"; do + if ! shared_vm_test "${arg}"; then + continue + fi =20 - vm_oops_cnt_after=3D$(vm_ssh -- dmesg | grep -i 'Oops' | wc -l) - if [[ ${vm_oops_cnt_after} -gt ${vm_oops_cnt_before} ]]; then - echo "FAIL: kernel oops detected on vm" | log_host "${name}" - rc=3D$KSFT_FAIL - fi + host_oops_cnt_before=3D$(dmesg | grep -c -i 'Oops') + host_warn_cnt_before=3D$(dmesg --level=3Dwarn | wc -l) + vm_oops_cnt_before=3D$(vm_ssh none -- dmesg | grep -c -i 'Oops') + vm_warn_cnt_before=3D$(vm_ssh none -- dmesg --level=3Dwarn | wc -l) + + name=3D$(echo "${arg}" | awk '{ print $1 }') + log_host "Executing test_${name}" + eval test_"${name}" + rc=3D$? + + host_oops_cnt_after=3D$(dmesg | grep -i 'Oops' | wc -l) + if [[ ${host_oops_cnt_after} -gt ${host_oops_cnt_before} ]]; then + echo "FAIL: kernel oops detected on host" | log_host "${name}" + rc=3D$KSFT_FAIL + fi + + host_warn_cnt_after=3D$(dmesg --level=3Dwarn | wc -l) + if [[ ${host_warn_cnt_after} -gt ${host_warn_cnt_before} ]]; then + echo "FAIL: kernel warning detected on host" | log_host "${name}" + rc=3D$KSFT_FAIL + fi =20 - vm_warn_cnt_after=3D$(vm_ssh -- dmesg --level=3Dwarn | wc -l) - if [[ ${vm_warn_cnt_after} -gt ${vm_warn_cnt_before} ]]; then - echo "FAIL: kernel warning detected on vm" | log_host "${name}" - rc=3D$KSFT_FAIL + vm_oops_cnt_after=3D$(vm_ssh none -- dmesg | grep -i 'Oops' | wc -l) + if [[ ${vm_oops_cnt_after} -gt ${vm_oops_cnt_before} ]]; then + echo "FAIL: kernel oops detected on vm" | log_host "${name}" + rc=3D$KSFT_FAIL + fi + + vm_warn_cnt_after=3D$(vm_ssh none -- dmesg --level=3Dwarn | wc -l) + if [[ ${vm_warn_cnt_after} -gt ${vm_warn_cnt_before} ]]; then + echo "FAIL: kernel warning detected on vm" | log_host "${name}" + rc=3D$KSFT_FAIL + fi + + check_result "${rc}" + done + + if [[ -n "${pidfile}" ]]; then + log_host "VM terminate" + terminate_pidfiles "${pidfile}" fi +} + +run_isolated_vm_tests() { + for arg in "${ARGS[@]}"; do + if shared_vm_test "${arg}"; then + continue + fi =20 - return "${rc}" + add_namespaces + if init_netns_test "${arg}"; then + init_namespaces + fi + + name=3D$(echo "${arg}" | awk '{ print $1 }') + log_host "Executing test_${name}" + eval test_"${name}" + check_result $? + + del_namespaces + done } =20 QEMU=3D"qemu-system-$(uname -m)" @@ -543,34 +1263,13 @@ fi check_args "${ARGS[@]}" check_deps check_vng +check_socat handle_build =20 echo "1..${#ARGS[@]}" =20 -log_host "Booting up VM" -vm_start -vm_wait_for_ssh -log_host "VM booted up" - -cnt_pass=3D0 -cnt_fail=3D0 -cnt_skip=3D0 -cnt_total=3D0 -for arg in "${ARGS[@]}"; do - run_test "${arg}" - rc=3D$? - if [[ ${rc} -eq $KSFT_PASS ]]; then - cnt_pass=3D$(( cnt_pass + 1 )) - echo "ok ${cnt_total} ${arg}" - elif [[ ${rc} -eq $KSFT_SKIP ]]; then - cnt_skip=3D$(( cnt_skip + 1 )) - echo "ok ${cnt_total} ${arg} # SKIP" - elif [[ ${rc} -eq $KSFT_FAIL ]]; then - cnt_fail=3D$(( cnt_fail + 1 )) - echo "not ok ${cnt_total} ${arg} # exit=3D$rc" - fi - cnt_total=3D$(( cnt_total + 1 )) -done +run_shared_vm_tests +run_isolated_vm_tests =20 echo "SUMMARY: PASS=3D${cnt_pass} SKIP=3D${cnt_skip} FAIL=3D${cnt_fail}" echo "Log: ${LOG}" --=20 2.47.3