From: Darrick J. Wong Date: Thu, 28 Jun 2018 20:11:58 +0000 (-0500) Subject: xfs: explicitly pass buffer size to xfs_corruption_error X-Git-Tag: v4.18.0-rc0~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3177b915d101ded316b3e32d1a966815dab17516;p=thirdparty%2Fxfsprogs-dev.git xfs: explicitly pass buffer size to xfs_corruption_error Source kernel commit: 2551a53053de52993be8752731f084fad3cfc4d8 Explicitly pass the buffer length to xfs_corruption_error() instead of assuming XFS_CORRUPTION_DUMP_LEN so that we avoid dumping off the end of the buffer. Signed-off-by: Darrick J. Wong Reviewed-by: Dave Chinner Signed-off-by: Eric Sandeen --- diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 4c15a21ad..31c13cec1 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -138,12 +138,12 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC }; /* stop unused var warnings by assigning mp to itself */ -#define xfs_corruption_error(fu,e,l,mp,fi,ln,fa) do { \ +#define xfs_corruption_error(e,l,mp,b,sz,fi,ln,fa) do { \ (mp) = (mp); \ cmn_err(CE_ALERT, "%s: XFS_CORRUPTION_ERROR", (e)); \ } while (0) -#define XFS_CORRUPTION_ERROR(e,l,mp,m) do { \ +#define XFS_CORRUPTION_ERROR(e, lvl, mp, buf, bufsize) do { \ (mp) = (mp); \ cmn_err(CE_ALERT, "%s: XFS_CORRUPTION_ERROR", (e)); \ } while (0) diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index 5f899f772..6a15ad5f2 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -1928,7 +1928,8 @@ xfs_btree_lookup( if (level != 0 || cur->bc_nlevels != 1) { XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, - cur->bc_mp, block); + cur->bc_mp, block, + sizeof(*block)); return -EFSCORRUPTED; } diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index 5f71d817f..467e96dc9 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -301,7 +301,7 @@ xfs_da3_node_read( break; default: XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, - tp->t_mountp, info); + tp->t_mountp, info, sizeof(*info)); xfs_trans_brelse(tp, *bpp); *bpp = NULL; return -EFSCORRUPTED; diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c index 4eeb92a28..3fd8307d8 100644 --- a/libxfs/xfs_dir2_data.c +++ b/libxfs/xfs_dir2_data.c @@ -248,7 +248,8 @@ xfs_dir3_data_check( if (!fa) return; xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, dp->i_mount, - bp->b_addr, __FILE__, __LINE__, fa); + bp->b_addr, BBTOB(bp->b_length), __FILE__, __LINE__, + fa); ASSERT(0); } #endif @@ -1154,7 +1155,7 @@ xfs_dir2_data_use_free( return 0; corrupt: xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, args->dp->i_mount, - hdr, __FILE__, __LINE__, fa); + hdr, sizeof(*hdr), __FILE__, __LINE__, fa); return -EFSCORRUPTED; } diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index 006d42ecd..6fd153d75 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -78,7 +78,8 @@ xfs_dir3_leaf_check( if (!fa) return; xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, dp->i_mount, - bp->b_addr, __FILE__, __LINE__, fa); + bp->b_addr, BBTOB(bp->b_length), __FILE__, __LINE__, + fa); ASSERT(0); } #else diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index f5c6f9a77..b0cdbbd5a 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -81,7 +81,8 @@ xfs_dir3_leaf_check( if (!fa) return; xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, dp->i_mount, - bp->b_addr, __FILE__, __LINE__, fa); + bp->b_addr, BBTOB(bp->b_length), __FILE__, __LINE__, + fa); ASSERT(0); } #else