xfs: check that bc_nlevels never overflows
Warn if we ever bump nlevels higher than the allowed maximum cursor height. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandan.babu@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
1ba6fd34ca
commit
4c175af2cc
|
@ -2933,6 +2933,7 @@ xfs_btree_new_iroot(
|
|||
be16_add_cpu(&block->bb_level, 1);
|
||||
xfs_btree_set_numrecs(block, 1);
|
||||
cur->bc_nlevels++;
|
||||
ASSERT(cur->bc_nlevels <= XFS_BTREE_MAXLEVELS);
|
||||
cur->bc_ptrs[level + 1] = 1;
|
||||
|
||||
kp = xfs_btree_key_addr(cur, 1, block);
|
||||
|
@ -3096,6 +3097,7 @@ xfs_btree_new_root(
|
|||
xfs_btree_setbuf(cur, cur->bc_nlevels, nbp);
|
||||
cur->bc_ptrs[cur->bc_nlevels] = nptr;
|
||||
cur->bc_nlevels++;
|
||||
ASSERT(cur->bc_nlevels <= XFS_BTREE_MAXLEVELS);
|
||||
*stat = 1;
|
||||
return 0;
|
||||
error0:
|
||||
|
|
|
@ -703,6 +703,7 @@ xfs_btree_bload_compute_geometry(
|
|||
* block-based btree level.
|
||||
*/
|
||||
cur->bc_nlevels++;
|
||||
ASSERT(cur->bc_nlevels <= XFS_BTREE_MAXLEVELS);
|
||||
xfs_btree_bload_level_geometry(cur, bbl, level,
|
||||
nr_this_level, &avg_per_block,
|
||||
&level_blocks, &dontcare64);
|
||||
|
@ -718,6 +719,7 @@ xfs_btree_bload_compute_geometry(
|
|||
|
||||
/* Otherwise, we need another level of btree. */
|
||||
cur->bc_nlevels++;
|
||||
ASSERT(cur->bc_nlevels <= XFS_BTREE_MAXLEVELS);
|
||||
}
|
||||
|
||||
nr_blocks += level_blocks;
|
||||
|
|
Loading…
Reference in New Issue