mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
xfs: tighten up validation of root block in inode forks
Check that root blocks that sit in the inode fork and thus have a NULL bp don't have siblings. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
bd45019d9a
commit
d477f1749f
@ -107,7 +107,7 @@ __xfs_btree_check_lblock(
|
||||
{
|
||||
struct xfs_mount *mp = cur->bc_mp;
|
||||
xfs_failaddr_t fa;
|
||||
xfs_fsblock_t fsb = NULLFSBLOCK;
|
||||
xfs_fsblock_t fsb;
|
||||
|
||||
if (xfs_has_crc(mp)) {
|
||||
if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid))
|
||||
@ -127,9 +127,19 @@ __xfs_btree_check_lblock(
|
||||
cur->bc_ops->get_maxrecs(cur, level))
|
||||
return __this_address;
|
||||
|
||||
if (bp)
|
||||
fsb = XFS_DADDR_TO_FSB(mp, xfs_buf_daddr(bp));
|
||||
/*
|
||||
* For inode-rooted btrees, the root block sits in the inode fork. In
|
||||
* that case bp is NULL, and the block must not have any siblings.
|
||||
*/
|
||||
if (!bp) {
|
||||
if (block->bb_u.l.bb_leftsib != cpu_to_be64(NULLFSBLOCK))
|
||||
return __this_address;
|
||||
if (block->bb_u.l.bb_rightsib != cpu_to_be64(NULLFSBLOCK))
|
||||
return __this_address;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fsb = XFS_DADDR_TO_FSB(mp, xfs_buf_daddr(bp));
|
||||
fa = xfs_btree_check_lblock_siblings(mp, fsb, block->bb_u.l.bb_leftsib);
|
||||
if (!fa)
|
||||
fa = xfs_btree_check_lblock_siblings(mp, fsb,
|
||||
|
Loading…
Reference in New Issue
Block a user