All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: stable@vger.kernel.org
Cc: linux-xfs@vger.kernel.org, Brian Foster <bfoster@redhat.com>,
	"Darrick J. Wong" <darrick.wong@oracle.com>
Subject: [PATCH 16/19] xfs: remove racy hasattr check from attr ops
Date: Thu,  2 Feb 2017 08:56:08 +0100	[thread overview]
Message-ID: <1486022171-8076-17-git-send-email-hch@lst.de> (raw)
In-Reply-To: <1486022171-8076-1-git-send-email-hch@lst.de>

From: Brian Foster <bfoster@redhat.com>

commit 5a93790d4e2df73e30c965ec6e49be82fc3ccfce upstream.

xfs_attr_[get|remove]() have unlocked attribute fork checks to optimize
away a lock cycle in cases where the fork does not exist or is otherwise
empty. This check is not safe, however, because an attribute fork short
form to extent format conversion includes a transient state that causes
the xfs_inode_hasattr() check to fail. Specifically,
xfs_attr_shortform_to_leaf() creates an empty extent format attribute
fork and then adds the existing shortform attributes to it.

This means that lookup of an existing xattr can spuriously return
-ENOATTR when racing against a setxattr that causes the associated
format conversion. This was originally reproduced by an untar on a
particularly configured glusterfs volume, but can also be reproduced on
demand with properly crafted xattr requests.

The format conversion occurs under the exclusive ilock. xfs_attr_get()
and xfs_attr_remove() already have the proper locking and checks further
down in the functions to handle this situation correctly. Drop the
unlocked checks to avoid the spurious failure and rely on the existing
logic.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 fs/xfs/libxfs/xfs_attr.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
index af1ecb1..6622d46 100644
--- a/fs/xfs/libxfs/xfs_attr.c
+++ b/fs/xfs/libxfs/xfs_attr.c
@@ -131,9 +131,6 @@ xfs_attr_get(
 	if (XFS_FORCED_SHUTDOWN(ip->i_mount))
 		return -EIO;
 
-	if (!xfs_inode_hasattr(ip))
-		return -ENOATTR;
-
 	error = xfs_attr_args_init(&args, ip, name, flags);
 	if (error)
 		return error;
@@ -392,9 +389,6 @@ xfs_attr_remove(
 	if (XFS_FORCED_SHUTDOWN(dp->i_mount))
 		return -EIO;
 
-	if (!xfs_inode_hasattr(dp))
-		return -ENOATTR;
-
 	error = xfs_attr_args_init(&args, dp, name, flags);
 	if (error)
 		return error;
-- 
2.1.4


  parent reply	other threads:[~2017-02-02  7:57 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-02  7:55 4.9-stable updates for XFS Christoph Hellwig
2017-02-02  7:55 ` [PATCH 01/19] xfs: bump up reserved blocks in xfs_alloc_set_aside Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: bump up reserved blocks in xfs_alloc_set_aside" has been added to the 4.9-stable tree gregkh
2017-02-02  7:55 ` [PATCH 02/19] xfs: fix bogus minleft manipulations Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: fix bogus minleft manipulations" has been added to the 4.9-stable tree gregkh
2017-02-02  7:55 ` [PATCH 03/19] xfs: adjust allocation length in xfs_alloc_space_available Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: adjust allocation length in xfs_alloc_space_available" has been added to the 4.9-stable tree gregkh
2017-02-02  7:55 ` [PATCH 04/19] xfs: don't rely on ->total in xfs_alloc_space_available Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: don't rely on ->total in xfs_alloc_space_available" has been added to the 4.9-stable tree gregkh
2017-02-02  7:55 ` [PATCH 05/19] xfs: don't print warnings when xfs_log_force fails Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: don't print warnings when xfs_log_force fails" has been added to the 4.9-stable tree gregkh
2017-02-02  7:55 ` [PATCH 06/19] xfs: make the ASSERT() condition likely Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: make the ASSERT() condition likely" has been added to the 4.9-stable tree gregkh
2017-02-02  7:55 ` [PATCH 07/19] xfs: sanity check directory inode di_size Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: sanity check directory inode di_size" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 08/19] xfs: add missing include dependencies to xfs_dir2.h Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: add missing include dependencies to xfs_dir2.h" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 09/19] xfs: replace xfs_mode_to_ftype table with switch statement Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: replace xfs_mode_to_ftype table with switch statement" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 10/19] xfs: sanity check inode mode when creating new dentry Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: sanity check inode mode when creating new dentry" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 11/19] xfs: sanity check inode di_mode Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: sanity check inode di_mode" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 12/19] xfs: don't wrap ID in xfs_dq_get_next_id Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: don't wrap ID in xfs_dq_get_next_id" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 13/19] xfs: fix xfs_mode_to_ftype() prototype Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: fix xfs_mode_to_ftype() prototype" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 14/19] xfs: fix COW writeback race Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: fix COW writeback race" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 15/19] xfs: verify dirblocklog correctly Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: verify dirblocklog correctly" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` Christoph Hellwig [this message]
2017-02-02 10:18   ` Patch "xfs: remove racy hasattr check from attr ops" " gregkh
2017-02-02  7:56 ` [PATCH 17/19] xfs: extsize hints are not unlikely in xfs_bmap_btalloc Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: extsize hints are not unlikely in xfs_bmap_btalloc" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 18/19] xfs: clear _XBF_PAGES from buffers when readahead page Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: clear _XBF_PAGES from buffers when readahead page" has been added to the 4.9-stable tree gregkh
2017-02-02  7:56 ` [PATCH 19/19] xfs: fix bmv_count confusion w/ shared extents Christoph Hellwig
2017-02-02 10:18   ` Patch "xfs: fix bmv_count confusion w/ shared extents" has been added to the 4.9-stable tree gregkh
2017-02-02 10:18 ` 4.9-stable updates for XFS Greg KH
2017-02-02 16:00 ` Eric Sandeen
2017-02-02 17:34   ` Eric Sandeen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1486022171-8076-17-git-send-email-hch@lst.de \
    --to=hch@lst.de \
    --cc=bfoster@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=linux-xfs@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.