scsi_id: correct error handling in prepend_vendor_model

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The callers of prepend_vendor_model both expect < 0 to be returned on
error and the index to be returned otherwise. However
prepend_vendor_model actually returns 1 on error. Fix this by correctly
returning -1. (Although perhaps it would be better to log then return
ind anyway so as to preserve some sort of backward compat?).

Older kernels (before e5b3cd42: "SCSI: sanitize INQUIRY strings")
truncated the model field in sysfs (or propagated bad results from the
target) to less than the expected/required 16 characters which meant
that the SCSI id was mangled into:
        # /sbin/scsi_id -g -s /block/sdg
        S146cee20VIRTUAL-DISK
when it should have been:
        # /sbin/scsi_id -g -s /block/sdg
        SIET     VIRTUAL-DISK   146cee20

Notice how the serial number has been pasted over the vendor+model at
index 1 instead of being added at the end.

In the former case:
        # cat /sys/devices/platform/host5/session1/target5:0:0/5:0:0:1/model | od -t c -t x1
        0000000   V   I   R   T   U   A   L   -   D   I   S   K  \n
                56 49 52 54 55 41 4c 2d 44 49 53 4b 0a
But it should have been:
        # cat /sys/devices/platform/host5/session1/target5:0:0/5:0:0:1/model | od -t c -t x1
        0000000   V   I   R   T   U   A   L   -   D   I   S   K                
                56 49 52 54 55 41 4c 2d 44 49 53 4b 20 20 20 20
        0000020  \n
                0a

Signed-off-by: Ian Campbell <ijc@xxxxxxxxxxxxxx>

diff --git a/extras/scsi_id/scsi_serial.c b/extras/scsi_id/scsi_serial.c
index 68bed08..4248829 100644
--- a/extras/scsi_id/scsi_serial.c
+++ b/extras/scsi_id/scsi_serial.c
@@ -467,7 +467,7 @@ static int prepend_vendor_model(struct udev *udev,
 	if (ind != (VENDOR_LENGTH + MODEL_LENGTH)) {
 		info(udev, "%s: expected length %d, got length %d\n",
 		     dev_scsi->kernel, (VENDOR_LENGTH + MODEL_LENGTH), ind);
-		return 1;
+		return -1;
 	}
 	return ind;
 }


--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux