Print this page
11969 Attempting to attach an invalid nvme namespace will cause a panic
Reviewed by: Robert Mustacchi <rm+illumos@fingolfin.org>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

@@ -4548,10 +4548,13 @@
                 return (EPERM);
 
         if (nsid == 0)
                 return (EINVAL);
 
+        if (nvme->n_ns[nsid - 1].ns_ignore)
+                return (0);
+
         rv = bd_detach_handle(nvme->n_ns[nsid - 1].ns_bd_hdl);
         if (rv != DDI_SUCCESS)
                 rv = EBUSY;
 
         return (rv);

@@ -4578,10 +4581,18 @@
         if (nvme_init_ns(nvme, nsid) != DDI_SUCCESS)
                 return (EIO);
 
         kmem_free(idns, sizeof (nvme_identify_nsid_t));
 
+        if (nvme->n_ns[nsid - 1].ns_ignore)
+                return (ENOTSUP);
+
+        if (nvme->n_ns[nsid - 1].ns_bd_hdl == NULL)
+                nvme->n_ns[nsid - 1].ns_bd_hdl = bd_alloc_handle(
+                    &nvme->n_ns[nsid - 1], &nvme_bd_ops, &nvme->n_prp_dma_attr,
+                    KM_SLEEP);
+
         rv = bd_attach_handle(nvme->n_dip, nvme->n_ns[nsid - 1].ns_bd_hdl);
         if (rv != DDI_SUCCESS)
                 rv = EBUSY;
 
         return (rv);