APPLIED: [SRU][PATCH 1/1][aws/groovy] vsock: forward all packets to the host when no H2G is registered

Ian May ian.may at canonical.com
Wed Dec 2 16:37:14 UTC 2020


Applied to groovy/linux

Thanks,
Ian

On 2020-12-01 08:54:59 , Kamal Mostafa wrote:
> From: Stefano Garzarella <sgarzare at redhat.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1903087
> 
> Before commit c0cfa2d8a788 ("vsock: add multi-transports support"),
> if a G2H transport was loaded (e.g. virtio transport), every packets
> was forwarded to the host, regardless of the destination CID.
> The H2G transports implemented until then (vhost-vsock, VMCI) always
> responded with an error, if the destination CID was not
> VMADDR_CID_HOST.
> 
> From that commit, we are using the remote CID to decide which
> transport to use, so packets with remote CID > VMADDR_CID_HOST(2)
> are sent only through H2G transport. If no H2G is available, packets
> are discarded directly in the guest.
> 
> Some use cases (e.g. Nitro Enclaves [1]) rely on the old behaviour
> to implement sibling VMs communication, so we restore the old
> behavior when no H2G is registered.
> It will be up to the host to discard packets if the destination is
> not the right one. As it was already implemented before adding
> multi-transport support.
> 
> Tested with nested QEMU/KVM by me and Nitro Enclaves by Andra.
> 
> [1] Documentation/virt/ne_overview.rst
> 
> Cc: Jorgen Hansen <jhansen at vmware.com>
> Cc: Dexuan Cui <decui at microsoft.com>
> Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
> Reported-by: Andra Paraschiv <andraprs at amazon.com>
> Tested-by: Andra Paraschiv <andraprs at amazon.com>
> Signed-off-by: Stefano Garzarella <sgarzare at redhat.com>
> Link: https://lore.kernel.org/r/20201112133837.34183-1-sgarzare@redhat.com
> Signed-off-by: Jakub Kicinski <kuba at kernel.org>
> (cherry picked from commit 65b422d9b61ba12c08150784e8012fa1892ad03e)
> Signed-off-by: Kamal Mostafa <kamal at canonical.com>
> ---
>  net/vmw_vsock/af_vsock.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
> index 6cd0df1c5caf..5fa4b1ac3c96 100644
> --- a/net/vmw_vsock/af_vsock.c
> +++ b/net/vmw_vsock/af_vsock.c
> @@ -438,7 +438,7 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
>  	case SOCK_STREAM:
>  		if (vsock_use_local_transport(remote_cid))
>  			new_transport = transport_local;
> -		else if (remote_cid <= VMADDR_CID_HOST)
> +		else if (remote_cid <= VMADDR_CID_HOST || !transport_h2g)
>  			new_transport = transport_g2h;
>  		else
>  			new_transport = transport_h2g;
> -- 
> 2.17.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list