diff options
author | Dave Chinner <david@fromorbit.com> | 2016-12-07 17:42:30 +1100 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-12-07 17:42:30 +1100 |
commit | a444d72e609062a040ed95a50e8fccfa1d58281b (patch) | |
tree | c57054f0e2674a9a80097e48a266c505c0cddca6 /fs/xfs/libxfs/xfs_btree.c | |
parent | 5f1c6d28cfcd11c9df67dad45992fd523727fe1e (diff) | |
parent | 6031e73a5b3f85ec45cac08ef90995b2d3f941c7 (diff) |
Merge branch 'xfs-4.10-misc-fixes-3' into for-next
Diffstat (limited to 'fs/xfs/libxfs/xfs_btree.c')
-rw-r--r-- | fs/xfs/libxfs/xfs_btree.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index 0e80993c8a59..21e6a6ab6b9a 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -1769,8 +1769,28 @@ xfs_btree_lookup_get_block( if (error) return error; + /* Check the inode owner since the verifiers don't. */ + if (xfs_sb_version_hascrc(&cur->bc_mp->m_sb) && + (cur->bc_flags & XFS_BTREE_LONG_PTRS) && + be64_to_cpu((*blkp)->bb_u.l.bb_owner) != + cur->bc_private.b.ip->i_ino) + goto out_bad; + + /* Did we get the level we were looking for? */ + if (be16_to_cpu((*blkp)->bb_level) != level) + goto out_bad; + + /* Check that internal nodes have at least one record. */ + if (level != 0 && be16_to_cpu((*blkp)->bb_numrecs) == 0) + goto out_bad; + xfs_btree_setbuf(cur, level, bp); return 0; + +out_bad: + *blkp = NULL; + xfs_trans_brelse(cur->bc_tp, bp); + return -EFSCORRUPTED; } /* |