diff --git a/c_binding/libsg.c b/c_binding/libsg.c
index 4689369..4adc3c9 100644
--- a/c_binding/libsg.c
+++ b/c_binding/libsg.c
@@ -502,6 +502,11 @@ int _sg_io_vpd(char *err_msg, int fd, uint8_t page_code, uint8_t *data)
case _SG_T10_SBC_VPD_BLK_DEV_CHA:
data_len = _T10_SBC_VPD_BLK_DEV_CHA_MAX_LEN;
break;
+ case _SG_T10_SPC_VPD_SUP_VPD_PGS:
+ case _SG_T10_SPC_VPD_UNIT_SN:
+ case _SG_T10_SPC_VPD_DI:
+ data_len = _SG_T10_SPC_VPD_SMALL_MAX_LEN;
+ break;
default:
data_len = _SG_T10_SPC_VPD_MAX_LEN;
}
diff --git a/c_binding/libsg.h b/c_binding/libsg.h
index 3fb6ab5..467d27d 100644
--- a/c_binding/libsg.h
+++ b/c_binding/libsg.h
@@ -63,7 +63,9 @@
/* SPC-5 rev 7, Table 142 - INQUIRY command */
#define _SG_T10_SPC_INQUIRY_MAX_LEN 0xffff
/* VPD is a INQUIRY */
-#define _SG_T10_SPC_VPD_MAX_LEN _SG_T10_SPC_INQUIRY_MAX_LEN
+#define _SG_T10_SPC_VPD_MAX_LEN _SG_T10_SPC_INQUIRY_MAX_LEN
+/* some controller/drives don't like a two-byte length for VPD pages 0, 0x80, 0x83 */
+#define _SG_T10_SPC_VPD_SMALL_MAX_LEN 0xfc
/* SPC-5 Table 444 - PROTOCOL IDENTIFIER field values */
#define _SG_T10_SPC_PROTOCOL_ID_OBSOLETE 1