]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: error out if trying to add attrs and anextents > 0
authorDarrick J. Wong <darrick.wong@oracle.com>
Tue, 10 Jan 2017 02:18:49 +0000 (20:18 -0600)
committerEric Sandeen <sandeen@redhat.com>
Tue, 10 Jan 2017 02:18:49 +0000 (20:18 -0600)
Source kernel commit: 0f352f8ee8412bd9d34fb2a6411241da61175c0e

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: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_bmap.c

index 8c360ca8b29bc85c600ace9cb5bea58d7043a002..e5ef6012770dba7b6e72963333f1cf74c72774ca 100644 (file)
@@ -1144,6 +1144,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.
@@ -1151,7 +1155,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);