• Stefano Garzarella's avatar
    vsock: forward all packets to the host when no H2G is registered · 65b422d9
    Stefano Garzarella authored
    Before commit c0cfa2d8 ("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@vmware.com>
    Cc: Dexuan Cui <decui@microsoft.com>
    Fixes: c0cfa2d8 ("vsock: add multi-transports support")
    Reported-by: default avatarAndra Paraschiv <andraprs@amazon.com>
    Tested-by: default avatarAndra Paraschiv <andraprs@amazon.com>
    Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Link: https://lore.kernel.org/r/20201112133837.34183-1-sgarzare@redhat.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    65b422d9
af_vsock.c 53.7 KB