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,583 ****
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);
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);
--- 573,590 ----
uint64_t idx, blk;
int err;
ASSERT(zap->zap_dbuf == NULL ||
zap_f_phys(zap) == zap->zap_dbuf->db_data);
!
! /* 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);