Author: dab
Date: Thu May 14 12:52:08 2020
New Revision: 361030
URL: https://svnweb.freebsd.org/changeset/base/361030

Log:
  MFC r360568:
  
  Fix various Coverity-detected errors in nvme driver
  
  This fixes several Coverity-detected errors in the nvme driver.
  
  CIDs addressed: 1008344, 1009377, 1009380, 1193740, 1305470, 1403975,
  1403980
  
  Sponsored by: Dell EMC Isilon

Modified:
  stable/12/sys/dev/nvme/nvme.c
  stable/12/sys/dev/nvme/nvme_ctrlr.c
  stable/12/sys/dev/nvme/nvme_ns.c
  stable/12/sys/dev/nvme/nvme_pci.c
  stable/12/sys/dev/nvme/nvme_qpair.c
  stable/12/sys/dev/nvme/nvme_sysctl.c
  stable/12/sys/dev/nvme/nvme_test.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/nvme/nvme.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme.c       Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme.c       Thu May 14 12:52:08 2020        
(r361030)
@@ -138,7 +138,8 @@ nvme_attach(device_t dev)
        ctrlr->config_hook.ich_func = nvme_ctrlr_start_config_hook;
        ctrlr->config_hook.ich_arg = ctrlr;
 
-       config_intrhook_establish(&ctrlr->config_hook);
+       if (config_intrhook_establish(&ctrlr->config_hook) != 0)
+               return (ENOMEM);
 
        return (0);
 }

Modified: stable/12/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_ctrlr.c Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme_ctrlr.c Thu May 14 12:52:08 2020        
(r361030)
@@ -1299,6 +1299,7 @@ nvme_ctrlr_ioctl(struct cdev *cdev, u_long cmd, caddr_
                struct nvme_get_nsid *gnsid = (struct nvme_get_nsid *)arg;
                strncpy(gnsid->cdev, device_get_nameunit(ctrlr->dev),
                    sizeof(gnsid->cdev));
+               gnsid->cdev[sizeof(gnsid->cdev) - 1] = '\0';
                gnsid->nsid = 0;
                break;
        }
@@ -1583,12 +1584,12 @@ nvme_ctrlr_resume(struct nvme_controller *ctrlr)
                goto fail;
 
        /*
-        * Now that we're reset the hardware, we can restart the controller. Any
+        * Now that we've reset the hardware, we can restart the controller. Any
         * I/O that was pending is requeued. Any admin commands are aborted with
         * an error. Once we've restarted, take the controller out of reset.
         */
        nvme_ctrlr_start(ctrlr, true);
-       atomic_cmpset_32(&ctrlr->is_resetting, 1, 0);
+       (void)atomic_cmpset_32(&ctrlr->is_resetting, 1, 0);
 
        return (0);
 fail:
@@ -1599,6 +1600,6 @@ fail:
         */
        nvme_printf(ctrlr, "Failed to reset on resume, failing.\n");
        nvme_ctrlr_fail(ctrlr);
-       atomic_cmpset_32(&ctrlr->is_resetting, 1, 0);
+       (void)atomic_cmpset_32(&ctrlr->is_resetting, 1, 0);
        return (0);
 }

Modified: stable/12/sys/dev/nvme/nvme_ns.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_ns.c    Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme_ns.c    Thu May 14 12:52:08 2020        
(r361030)
@@ -87,6 +87,7 @@ nvme_ns_ioctl(struct cdev *cdev, u_long cmd, caddr_t a
                struct nvme_get_nsid *gnsid = (struct nvme_get_nsid *)arg;
                strncpy(gnsid->cdev, device_get_nameunit(ctrlr->dev),
                    sizeof(gnsid->cdev));
+               gnsid->cdev[sizeof(gnsid->cdev) - 1] = '\0';
                gnsid->nsid = ns->id;
                break;
        }

Modified: stable/12/sys/dev/nvme/nvme_pci.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_pci.c   Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme_pci.c   Thu May 14 12:52:08 2020        
(r361030)
@@ -243,11 +243,9 @@ nvme_ctrlr_configure_intx(struct nvme_controller *ctrl
                return (ENOMEM);
        }
 
-       bus_setup_intr(ctrlr->dev, ctrlr->res,
+       if (bus_setup_intr(ctrlr->dev, ctrlr->res,
            INTR_TYPE_MISC | INTR_MPSAFE, NULL, nvme_ctrlr_intx_handler,
-           ctrlr, &ctrlr->tag);
-
-       if (ctrlr->tag == NULL) {
+           ctrlr, &ctrlr->tag) != 0) {
                nvme_printf(ctrlr, "unable to setup intx handler\n");
                return (ENOMEM);
        }

Modified: stable/12/sys/dev/nvme/nvme_qpair.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_qpair.c Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme_qpair.c Thu May 14 12:52:08 2020        
(r361030)
@@ -671,9 +671,12 @@ nvme_qpair_construct(struct nvme_qpair *qpair,
 
                qpair->res = bus_alloc_resource_any(ctrlr->dev, SYS_RES_IRQ,
                    &qpair->rid, RF_ACTIVE);
-               bus_setup_intr(ctrlr->dev, qpair->res,
+               if (bus_setup_intr(ctrlr->dev, qpair->res,
                    INTR_TYPE_MISC | INTR_MPSAFE, NULL,
-                   nvme_qpair_msix_handler, qpair, &qpair->tag);
+                   nvme_qpair_msix_handler, qpair, &qpair->tag) != 0) {
+                       nvme_printf(ctrlr, "unable to setup intx handler\n");
+                       goto out;
+               }
                if (qpair->id == 0) {
                        bus_describe_intr(ctrlr->dev, qpair->res, qpair->tag,
                            "admin");

Modified: stable/12/sys/dev/nvme/nvme_sysctl.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_sysctl.c        Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme_sysctl.c        Thu May 14 12:52:08 2020        
(r361030)
@@ -145,16 +145,17 @@ static int
 nvme_sysctl_timeout_period(SYSCTL_HANDLER_ARGS)
 {
        struct nvme_controller *ctrlr = arg1;
-       uint32_t oldval = ctrlr->timeout_period;
-       int error = sysctl_handle_int(oidp, &ctrlr->timeout_period, 0, req);
+       uint32_t newval = ctrlr->timeout_period;
+       int error = sysctl_handle_int(oidp, &newval, 0, req);
 
-       if (error)
+       if (error || (req->newptr == NULL))
                return (error);
 
-       if (ctrlr->timeout_period > NVME_MAX_TIMEOUT_PERIOD ||
-           ctrlr->timeout_period < NVME_MIN_TIMEOUT_PERIOD) {
-               ctrlr->timeout_period = oldval;
+       if (newval > NVME_MAX_TIMEOUT_PERIOD ||
+           newval < NVME_MIN_TIMEOUT_PERIOD) {
                return (EINVAL);
+       } else {
+               ctrlr->timeout_period = newval;
        }
 
        return (0);

Modified: stable/12/sys/dev/nvme/nvme_test.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_test.c  Thu May 14 09:55:41 2020        
(r361029)
+++ stable/12/sys/dev/nvme/nvme_test.c  Thu May 14 12:52:08 2020        
(r361030)
@@ -100,7 +100,7 @@ nvme_ns_bio_test(void *arg)
        idx = atomic_fetchadd_int(&io_test->td_idx, 1);
        dev = io_test->ns->cdev;
 
-       offset = idx * 2048 * nvme_ns_get_sector_size(io_test->ns);
+       offset = idx * 2048ULL * nvme_ns_get_sector_size(io_test->ns);
 
        while (1) {
 
@@ -120,6 +120,8 @@ nvme_ns_bio_test(void *arg)
                } else
                        csw = dev->si_devsw;
 
+               if (csw == NULL)
+                       panic("Unable to retrieve device switch");
                mtx = mtx_pool_find(mtxpool_sleep, bio);
                mtx_lock(mtx);
                (*csw->d_strategy)(bio);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to