• Martin Wilck's avatar
    scsi: core: Fix VPD LUN ID designator priorities · 2e4209b3
    Martin Wilck authored
    The current implementation of scsi_vpd_lun_id() uses the designator length
    as an implicit measure of priority. This works most of the time, but not
    always. For example, some Hitachi storage arrays return this in VPD 0x83:
    
    VPD INQUIRY: Device Identification page
      Designation descriptor number 1, descriptor length: 24
        designator_type: T10 vendor identification,  code_set: ASCII
        associated with the Addressed logical unit
          vendor id: HITACHI
          vendor specific: 5030C3502025
      Designation descriptor number 2, descriptor length: 6
        designator_type: vendor specific [0x0],  code_set: Binary
        associated with the Target port
          vendor specific: 08 03
      Designation descriptor number 3, descriptor length: 20
        designator_type: NAA,  code_set: Binary
        associated with the Addressed logical unit
          NAA 6, IEEE Company_id: 0x60e8
          Vendor Specific Identifier: 0x7c35000
          Vendor Specific Identifier Extension: 0x30c35000002025
          [0x60060e8007c350000030c35000002025]
    
    The current code would use the first descriptor because it's longer than
    the NAA descriptor. But this is wrong, the kernel is supposed to prefer NAA
    descriptors over T10 vendor ID. Designator length should only be used to
    compare designators of the same type.
    
    This patch addresses the issue by separating designator priority and
    length.
    
    Link: https://lore.kernel.org/r/20201029170846.14786-1-mwilck@suse.com
    Fixes: 9983bed3 ("scsi: Add scsi_vpd_lun_id()")
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Signed-off-by: default avatarMartin Wilck <mwilck@suse.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    2e4209b3
scsi_lib.c 83.8 KB