Print this page
6842 Fix empty xattr dir causing lockup
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>

@@ -573,11 +573,18 @@
         uint64_t idx, blk;
         int err;
 
         ASSERT(zap->zap_dbuf == NULL ||
             zap_f_phys(zap) == zap->zap_dbuf->db_data);
-        ASSERT3U(zap_f_phys(zap)->zap_magic, ==, ZAP_MAGIC);
+
+        /* Reality check for corrupt zap objects (leaf or header). */
+        if ((zap_f_phys(zap)->zap_block_type != ZBT_LEAF &&
+            zap_f_phys(zap)->zap_block_type != ZBT_HEADER) ||
+            zap_f_phys(zap)->zap_magic != ZAP_MAGIC) {
+                return (SET_ERROR(EIO));
+        }
+
         idx = ZAP_HASH_IDX(h, zap_f_phys(zap)->zap_ptrtbl.zt_shift);
         err = zap_idx_to_blk(zap, idx, &blk);
         if (err != 0)
                 return (err);
         err = zap_get_leaf_byblk(zap, blk, tx, lt, lp);