• Ewan D. Milne's avatar
    [SCSI] sd: fix crash when UA received on DIF enabled device · 085b513f
    Ewan D. Milne authored
    sd_prep_fn will allocate a larger CDB for the command via mempool_alloc
    for devices using DIF type 2 protection.  This CDB was being freed
    in sd_done, which results in a kernel crash if the command is retried
    due to a UNIT ATTENTION.  This change moves the code to free the larger
    CDB into sd_unprep_fn instead, which is invoked after the request is
    complete.
    
    It is no longer necessary to call scsi_print_command separately for
    this case as the ->cmnd will no longer be NULL in the normal code path.
    
    Also removed conditional test for DIF type 2 when freeing the larger
    CDB because the protection_type could have been changed via sysfs while
    the command was executing.
    Signed-off-by: default avatarEwan D. Milne <emilne@redhat.com>
    Acked-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
    085b513f
sd.c 84.6 KB