• Felipe Franciosi's avatar
    scsi: virtio_scsi: don't send sc payload with tmfs · 3722e6a5
    Felipe Franciosi authored
    The virtio scsi spec defines struct virtio_scsi_ctrl_tmf as a set of
    device-readable records and a single device-writable response entry:
    
        struct virtio_scsi_ctrl_tmf
        {
            // Device-readable part
            le32 type;
            le32 subtype;
            u8 lun[8];
            le64 id;
            // Device-writable part
            u8 response;
        }
    
    The above should be organised as two descriptor entries (or potentially
    more if using VIRTIO_F_ANY_LAYOUT), but without any extra data after "le64
    id" or after "u8 response".
    
    The Linux driver doesn't respect that, with virtscsi_abort() and
    virtscsi_device_reset() setting cmd->sc before calling virtscsi_tmf().  It
    results in the original scsi command payload (or writable buffers) added to
    the tmf.
    
    This fixes the problem by leaving cmd->sc zeroed out, which makes
    virtscsi_kick_cmd() add the tmf to the control vq without any payload.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarFelipe Franciosi <felipe@nutanix.com>
    Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    3722e6a5
virtio_scsi.c 25 KB