Skip to content
  • Michael S. Tsirkin's avatar
    vhost: disable for OABI · d085eb8c
    Michael S. Tsirkin authored
    vhost is currently broken on the some ARM configs.
    
    The reason is that the ring element addresses are passed between
    components with different alignments assumptions. Thus, if
    guest selects a pointer and host then gets and dereferences
    it, then alignment assumed by the host's compiler might be
    greater than the actual alignment of the pointer.
    compiler on the host from assuming pointer is aligned.
    
    This actually triggers on ARM with -mabi=apcs-gnu - which is a
    deprecated configuration. With this OABI, compiler assumes that
    all structures are 4 byte aligned - which is stronger than
    virtio guarantees for available and used rings, which are
    merely 2 bytes. Thus a guest without -mabi=apcs-gnu running
    on top of host with -mabi=apcs-gnu will be broken.
    
    The correct fix is to force alignment of structures - however
    that is an intrusive fix that's best deferred until the next release.
    
    We didn't previously support such ancient systems at all - this surfaced
    after vdpa support prompted removing dependency of vhost on
    VIRTULIZATION. So for now, let's just add something along the lines of
    
    	depends on !ARM || AEABI
    
    to the virtio Kconfig declaration, and add a comment that it has to do
    with struct member alignment.
    
    Note: we can't make VHOST and VHOST_RING themselves have
    a dependency since these are selected. Add a new symbol for that.
    
    We should be able to drop this dependency down the road.
    
    Fixes: 20c384f1
    
     ("vhost: refine vhost and vringh kconfig")
    Suggested-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Suggested-by: default avatarRichard Earnshaw <Richard.Earnshaw@arm.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    d085eb8c