summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sbin/nvmecontrol/devlist.c2
-rw-r--r--sbin/nvmecontrol/identify.c9
-rw-r--r--sys/dev/nvd/nvd.c8
-rw-r--r--sys/dev/nvme/nvme.h10
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;
OpenPOWER on IntegriCloud