Print this page
Caution with use after exi_rele()
Be far more judicious in the use of curzone-using macros.
(Merge and extra asserts by danmcd.)
        
@@ -2945,15 +2945,17 @@
                          */
 
                         /* Release the reference on the old exi value */
                         ASSERT(*exi != NULL);
                         exi_rele(*exi);
+                        *exi = NULL;
 
                         if (error = nfs_check_vpexi(mc_dvp, *vpp, kcred, exi)) {
                                 VN_RELE(*vpp);
                                 goto publicfh_done;
                         }
+                        /* Have a new *exi */
                 }
         }
 
 publicfh_done:
         if (mc_dvp)
@@ -2976,10 +2978,12 @@
 {
         char namebuf[TYPICALMAXPATHLEN];
         struct pathname pn;
         int error;
 
+        ASSERT3U(crgetzoneid(cr), ==, curzone->zone_id);
+
         /*
          * If pathname starts with '/', then set startdvp to root.
          */
         if (*path == '/') {
                 while (*path == '/')