Print this page
OS-68 cfgadm can cause kernel panic when trying to configure a retired device

@@ -19,10 +19,11 @@
  * CDDL HEADER END
  */
 
 /*
  * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  * Copyright (c) 2016 by Delphix. All rights reserved.
  */
 
 #include <sys/note.h>

@@ -3098,10 +3099,15 @@
 
         self = e_ddi_hold_devi_by_dev(dev, 0);
         if (self == NULL) {
                 rv = ENXIO;
                 goto out;
+        }
+
+        if (DEVI(self)->devi_flags & (DEVI_RETIRED | DEVI_RETIRING)) {
+                rv = ENXIO;
+                goto out;
         }
 
         tran = ddi_get_driver_private(self);
         if (tran == NULL) {
                 rv = ENXIO;