On Thu, 2026-03-26 at 23:41 -0400, Benjamin Marzinski wrote: > Some older SCSI devices return a SCSI-2 style vpd page 0x83, instead > of > a SPC-2/3 format one. The SCSI-2 page 83 format returns an IEEE WWN > in > binary encoded hexi-decimal in the 16 bytes following the initial > 4-byte page 83 reply header. > > Check the 7th byte of the vpd page 83 buffer to determine whether > this > is a SCSI-2 or SPC-2/3 confomant one. Byte 7 is the 3rd byte of first > Identification descriptor in a SPC-2/3 confromant vpd page 83. This > is a > reserved field, and is guaranteed to be 0. If it is not zero, then it > is > likely the 3rd byte of a SCSI-2 Identifier (The first 3 bytes of the > ID > are the Organizationally Unique Identifier). Both the sg_inq and > scsi_id > commands handle vpd page 83 this way. To make sure that the WWID > which > multipath reads directly from the device matches, it should handle > this > format as well. > > Signed-off-by: Benjamin Marzinski <[email protected]> > --- > libmultipath/discovery.c | 13 +++++++++ > tests/vpd.c | 58 > ++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 71 insertions(+) > > diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c > index 0efb8213..057ff45f 100644 > --- a/libmultipath/discovery.c > +++ b/libmultipath/discovery.c > @@ -1208,6 +1208,18 @@ parse_vpd_pg83(const unsigned char *in, size_t > in_len, > if (out_len <= 1) > return 0; > > + /* > + * Not a valid SPC-2/3 vpd page 83. Assume it's a SCSI-2 > style > + * descriptor. > + */ > + if (in[6] != 0) {
Make sure that if in_len is > 6 (or actually, large enough to hold the SCSI-2 ID)? > + len = 0; > + vpd_type = 0x3; > + vpd_len = in_len - 4; > + vpd = in + 4; > + goto decode; > + } > + Regards, Martin
