| From 0db8fba8de55ae96d094236098f42e84e5ae22ab Mon Sep 17 00:00:00 2001 |
| From: "Darrick J. Wong" <darrick.wong@oracle.com> |
| Date: Mon, 5 Dec 2016 12:36:56 +1100 |
| Subject: [PATCH] xfs: complain if we don't get nextents bmap records |
| |
| commit 356a3225222e5bc4df88aef3419fb6424f18ab69 upstream. |
| |
| When reading into memory all extents of a btree-format inode fork, |
| complain if the number of extents we find is not the same as the number |
| of extents reported in the inode core. This is needed to stop an IO |
| action from accessing the garbage areas of the in-core fork. |
| |
| [dchinner: removed redundant assert] |
| |
| Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> |
| Reviewed-by: Dave Chinner <dchinner@redhat.com> |
| Signed-off-by: Dave Chinner <david@fromorbit.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c |
| index 86491aa7d854..55b06ebca4c3 100644 |
| --- a/fs/xfs/libxfs/xfs_bmap.c |
| +++ b/fs/xfs/libxfs/xfs_bmap.c |
| @@ -1324,8 +1324,9 @@ xfs_bmap_read_extents( |
| return error; |
| block = XFS_BUF_TO_BLOCK(bp); |
| } |
| + if (i != XFS_IFORK_NEXTENTS(ip, whichfork)) |
| + return -EFSCORRUPTED; |
| ASSERT(i == xfs_iext_count(ifp)); |
| - ASSERT(i == XFS_IFORK_NEXTENTS(ip, whichfork)); |
| XFS_BMAP_TRACE_EXLIST(ip, i, whichfork); |
| return 0; |
| error0: |
| -- |
| 2.10.1 |
| |