• Tony Krowiak's avatar
    s390/vfio-ap: always filter entire AP matrix · 850fb7fa
    Tony Krowiak authored
    
    
    The vfio_ap_mdev_filter_matrix function is called whenever a new adapter or
    domain is assigned to the mdev. The purpose of the function is to update
    the guest's AP configuration by filtering the matrix of adapters and
    domains assigned to the mdev. When an adapter or domain is assigned, only
    the APQNs associated with the APID of the new adapter or APQI of the new
    domain are inspected. If an APQN does not reference a queue device bound to
    the vfio_ap device driver, then it's APID will be filtered from the mdev's
    matrix when updating the guest's AP configuration.
    
    Inspecting only the APID of the new adapter or APQI of the new domain will
    result in passing AP queues through to a guest that are not bound to the
    vfio_ap device driver under certain circumstances. Consider the following:
    
    guest's AP configuration (all also assigned to the mdev's matrix):
    14.0004
    14.0005
    14.0006
    16.0004
    16.0005
    16.0006
    
    unassign domain 4
    unbind queue 16.0005
    assign domain 4
    
    When domain 4 is re-assigned, since only domain 4 will be inspected, the
    APQNs that will be examined will be:
    14.0004
    16.0004
    
    Since both of those APQNs reference queue devices that are bound to the
    vfio_ap device driver, nothing will get filtered from the mdev's matrix
    when updating the guest's AP configuration. Consequently, queue 16.0005
    will get passed through despite not being bound to the driver. This
    violates the linux device model requirement that a guest shall only be
    given access to devices bound to the device driver facilitating their
    pass-through.
    
    To resolve this problem, every adapter and domain assigned to the mdev will
    be inspected when filtering the mdev's matrix.
    Signed-off-by: default avatarTony Krowiak <akrowiak@linux.ibm.com>
    Acked-by: default avatarHalil Pasic <pasic@linux.ibm.com>
    Fixes: 48cae940 ("s390/vfio-ap: refresh guest's APCB by filtering AP resources assigned to mdev")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240115185441.31526-2-akrowiak@linux.ibm.com
    
    Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    850fb7fa
vfio_ap_ops.c 70.5 KB