Author: jimharris
Date: Wed Jul 17 23:23:38 2013
New Revision: 253437
URL: http://svnweb.freebsd.org/changeset/base/253437

Log:
  Define constants for the lengths of the serial number, model number
  and firmware revision in the controller's identify structure.
  
  Also modify consumers of these fields to ensure they only use the
  specified number of bytes for their respective fields.
  
  Sponsored by: Intel
  Reviewed by:  carl
  MFC after:    3 days

Modified:
  head/sbin/nvmecontrol/devlist.c
  head/sbin/nvmecontrol/identify.c
  head/sys/dev/nvd/nvd.c
  head/sys/dev/nvme/nvme.h

Modified: head/sbin/nvmecontrol/devlist.c
==============================================================================
--- head/sbin/nvmecontrol/devlist.c     Wed Jul 17 23:14:41 2013        
(r253436)
+++ head/sbin/nvmecontrol/devlist.c     Wed Jul 17 23:23:38 2013        
(r253437)
@@ -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,

Modified: head/sbin/nvmecontrol/identify.c
==============================================================================
--- head/sbin/nvmecontrol/identify.c    Wed Jul 17 23:14:41 2013        
(r253436)
+++ head/sbin/nvmecontrol/identify.c    Wed Jul 17 23:23:38 2013        
(r253437)
@@ -47,9 +47,12 @@ print_controller(struct nvme_controller_
        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]);

Modified: head/sys/dev/nvd/nvd.c
==============================================================================
--- head/sys/dev/nvd/nvd.c      Wed Jul 17 23:14:41 2013        (r253436)
+++ head/sys/dev/nvd/nvd.c      Wed Jul 17 23:23:38 2013        (r253437)
@@ -306,12 +306,16 @@ nvd_new_disk(struct nvme_namespace *ns, 
        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);

Modified: head/sys/dev/nvme/nvme.h
==============================================================================
--- head/sys/dev/nvme/nvme.h    Wed Jul 17 23:14:41 2013        (r253436)
+++ head/sys/dev/nvme/nvme.h    Wed Jul 17 23:23:38 2013        (r253437)
@@ -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;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to