diff options
-rw-r--r-- | sbin/nvmecontrol/devlist.c | 2 | ||||
-rw-r--r-- | sbin/nvmecontrol/identify.c | 9 | ||||
-rw-r--r-- | sys/dev/nvd/nvd.c | 8 | ||||
-rw-r--r-- | sys/dev/nvme/nvme.h | 10 |
4 files changed, 20 insertions, 9 deletions
diff --git a/sbin/nvmecontrol/devlist.c b/sbin/nvmecontrol/devlist.c index 849b364..46879db 100644 --- a/sbin/nvmecontrol/devlist.c +++ b/sbin/nvmecontrol/devlist.c @@ -89,7 +89,7 @@ devlist(int argc, char *argv[]) found++; read_controller_data(fd, &cdata); - printf("%6s: %s\n", name, cdata.mn); + printf("%6s: %.*s\n", name, NVME_MODEL_NUMBER_LENGTH, cdata.mn); for (i = 0; i < cdata.nn; i++) { sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr, diff --git a/sbin/nvmecontrol/identify.c b/sbin/nvmecontrol/identify.c index 7cc499c..6585430 100644 --- a/sbin/nvmecontrol/identify.c +++ b/sbin/nvmecontrol/identify.c @@ -47,9 +47,12 @@ print_controller(struct nvme_controller_data *cdata) printf("================================\n"); printf("Vendor ID: %04x\n", cdata->vid); printf("Subsystem Vendor ID: %04x\n", cdata->ssvid); - printf("Serial Number: %s\n", cdata->sn); - printf("Model Number: %s\n", cdata->mn); - printf("Firmware Version: %s\n", cdata->fr); + printf("Serial Number: %.*s\n", + NVME_SERIAL_NUMBER_LENGTH, cdata->sn); + printf("Model Number: %.*s\n", + NVME_MODEL_NUMBER_LENGTH, cdata->mn); + printf("Firmware Version: %.*s\n", + NVME_FIRMWARE_REVISION_LENGTH, cdata->fr); printf("Recommended Arb Burst: %d\n", cdata->rab); printf("IEEE OUI Identifier: %02x %02x %02x\n", cdata->ieee[0], cdata->ieee[1], cdata->ieee[2]); diff --git a/sys/dev/nvd/nvd.c b/sys/dev/nvd/nvd.c index 1d2d891..868a238 100644 --- a/sys/dev/nvd/nvd.c +++ b/sys/dev/nvd/nvd.c @@ -306,12 +306,16 @@ nvd_new_disk(struct nvme_namespace *ns, void *ctrlr_arg) disk->d_flags |= DISKFLAG_UNMAPPED_BIO; #endif + /* + * d_ident and d_descr are both far bigger than the length of either + * the serial or model number strings. + */ strlcpy(disk->d_ident, nvme_ns_get_serial_number(ns), - sizeof(disk->d_ident)); + min(sizeof(disk->d_ident), NVME_SERIAL_NUMBER_LENGTH)); #if __FreeBSD_version >= 900034 strlcpy(disk->d_descr, nvme_ns_get_model_number(ns), - sizeof(disk->d_descr)); + min(sizeof(disk->d_descr), NVME_MODEL_NUMBER_LENGTH)); #endif disk_create(disk, DISK_VERSION); diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h index df409cc..f30505a 100644 --- a/sys/dev/nvme/nvme.h +++ b/sys/dev/nvme/nvme.h @@ -389,6 +389,10 @@ enum nvme_activate_action { NVME_AA_ACTIVATE = 0x2, }; +#define NVME_SERIAL_NUMBER_LENGTH 20 +#define NVME_MODEL_NUMBER_LENGTH 40 +#define NVME_FIRMWARE_REVISION_LENGTH 8 + struct nvme_controller_data { /* bytes 0-255: controller capabilities and features */ @@ -400,13 +404,13 @@ struct nvme_controller_data { uint16_t ssvid; /** serial number */ - int8_t sn[20]; + int8_t sn[NVME_SERIAL_NUMBER_LENGTH]; /** model number */ - int8_t mn[40]; + int8_t mn[NVME_MODEL_NUMBER_LENGTH]; /** firmware revision */ - uint8_t fr[8]; + uint8_t fr[NVME_FIRMWARE_REVISION_LENGTH]; /** recommended arbitration burst */ uint8_t rab; |