Re: [PATCH 06/14] xfs: check that bc_nlevels never overflows

Chandan Babu R
2021-09-20T10:10:26Z

On 18 Sep 2021 at 06:59, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> Warn if we ever bump nlevels higher than the allowed maximum cursor
> height.

Looks good.

Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>

>
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
> ---
> fs/xfs/libxfs/xfs_btree.c | 2 ++
> fs/xfs/libxfs/xfs_btree_staging.c | 2 ++
> 2 files changed, 4 insertions(+)
>
>
> diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
> index b0cce0932f02..bc4e49f0456a 100644
> --- a/fs/xfs/libxfs/xfs_btree.c
> +++ b/fs/xfs/libxfs/xfs_btree.c
> @@ -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:
> diff --git a/fs/xfs/libxfs/xfs_btree_staging.c b/fs/xfs/libxfs/xfs_btree_staging.c
> index ac9e80152b5c..26143297bb7b 100644
> --- a/fs/xfs/libxfs/xfs_btree_staging.c
> +++ b/fs/xfs/libxfs/xfs_btree_staging.c
> @@ -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;

--
chandan