| From 3afb2b082a1e9973fe85b92ad5149ddc544f45f4 Mon Sep 17 00:00:00 2001 |
| From: "Darrick J. Wong" <darrick.wong@oracle.com> |
| Date: Mon, 5 Dec 2016 12:38:11 +1100 |
| Subject: [PATCH] xfs: error out if trying to add attrs and anextents > 0 |
| |
| commit 0f352f8ee8412bd9d34fb2a6411241da61175c0e upstream. |
| |
| We shouldn't assert if somehow we end up trying to add an attr fork to |
| an inode that apparently already has attr extents because this is an |
| indication of on-disk corruption. Instead, return an error code to |
| userspace. |
| |
| 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 55b06ebca4c3..06004c1a5efa 100644 |
| --- a/fs/xfs/libxfs/xfs_bmap.c |
| +++ b/fs/xfs/libxfs/xfs_bmap.c |
| @@ -1100,6 +1100,10 @@ xfs_bmap_add_attrfork( |
| goto trans_cancel; |
| if (XFS_IFORK_Q(ip)) |
| goto trans_cancel; |
| + if (ip->i_d.di_anextents != 0) { |
| + error = -EFSCORRUPTED; |
| + goto trans_cancel; |
| + } |
| if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS) { |
| /* |
| * For inodes coming from pre-6.2 filesystems. |
| @@ -1107,7 +1111,6 @@ xfs_bmap_add_attrfork( |
| ASSERT(ip->i_d.di_aformat == 0); |
| ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS; |
| } |
| - ASSERT(ip->i_d.di_anextents == 0); |
| |
| xfs_trans_ijoin(tp, ip, 0); |
| xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
| -- |
| 2.10.1 |
| |