From: Luis Henriques <luis@igalia.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Christian Brauner <brauner@kernel.org>,
Miklos Szeredi <miklos@szeredi.hu>,
linux-fsdevel@vger.kernel.org, fuse-devel@lists.linux.dev,
stable@vger.kernel.org
Subject: Re: [PATCH 1/2] fs: preserve ACL_DONT_CACHE state in forget_cached_acl()
Date: Wed, 15 Jul 2026 16:43:28 +0100 [thread overview]
Message-ID: <871pd445sv.fsf@wotan.olymp> (raw)
In-Reply-To: <20260713220932.413004-2-amir73il@gmail.com> (Amir Goldstein's message of "Tue, 14 Jul 2026 00:09:31 +0200")
On Tue, Jul 14 2026, Amir Goldstein wrote:
> The ACL_DONT_CACHE state is meant to be a constant state for the inode
> for filesystems that want to opt out of posix acl caching.
>
> Commit facd61053cff1 ("fuse: fixes after adapting to new posix acl api")
> used this facility to opt out of posix acl caching for fuse inodes with
> fuse server that does not negotiate FUSE_POSIX_ACL (fc->posix_acl).
>
> The commit also takes care to gate the forget_all_cached_acls() call in
> fuse_set_acl() on fc->posix_acl because there is no need for it, but
> there are other placed in fuse code which call forget_all_cached_acls()
> unconditional to fc->posix_acl and those cause the loss of the
> ACL_DONT_CACHE state.
>
> This is not only a functional bug. Properly timed, a get_acl() from this
> fuse filesystem can return a stale cached value, as was observed in
> tests, because set_acl() does not invalidate the unintentional acl
> cache.
>
> We could fix this in fuse, but it actually makes no sense for the vfs
> helper forget_cached_acl() to invalidate the ACL_DONT_CACHE state, so
> let it not do that to fix fuse and future users of ACL_DONT_CACHE.
>
> Fixes: facd61053cff1 ("fuse: fixes after adapting to new posix acl api")
> Cc: stable@vger.kernel.org Signed-off-by: Amir Goldstein
> <amir73il@gmail.com>
> ---
> fs/posix_acl.c | 7 +++++++ 1 file changed, 7 insertions(+)
>
> diff --git a/fs/posix_acl.c b/fs/posix_acl.c index
> b4bfe4ddf64ea..3dc62c1c27087 100644 --- a/fs/posix_acl.c +++
> b/fs/posix_acl.c @@ -93,6 +93,13 @@ static void
> __forget_cached_acl(struct posix_acl **p)
> {
> struct posix_acl *old;
>
> + /* + * ACL_DONT_CACHE is expected to be a "const" value and xchg it
> with + * ACL_NOT_CACHED would enable acl caching for the inode - + *
> clearly not what the caller has intended. + */ + if (READ_ONCE(*p) ==
> ACL_DONT_CACHE) + return;
> old = xchg(p, ACL_NOT_CACHED); if (!is_uncached_acl(old))
> posix_acl_release(old);
Nice catch! FWIW feel free to add my
Reviewed-by: Luis Henriques <luis@igalia.com>
Cheers,
--
Luís
next prev parent reply other threads:[~2026-07-15 15:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-13 22:09 [PATCH 0/2] Fix for unintended FUSE ACL cache Amir Goldstein
2026-07-13 22:09 ` [PATCH 1/2] fs: preserve ACL_DONT_CACHE state in forget_cached_acl() Amir Goldstein
2026-07-15 9:02 ` Christian Brauner
2026-07-15 9:40 ` Amir Goldstein
2026-07-15 15:43 ` Luis Henriques [this message]
2026-07-13 22:09 ` [PATCH 2/2] selftests/fuse: add ACL_DONT_CACHE regression test Amir Goldstein
2026-07-15 16:01 ` Luis Henriques
2026-07-15 17:38 ` Amir Goldstein
2026-07-15 20:42 ` Luis Henriques
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=871pd445sv.fsf@wotan.olymp \
--to=luis@igalia.com \
--cc=amir73il@gmail.com \
--cc=brauner@kernel.org \
--cc=fuse-devel@lists.linux.dev \
--cc=linux-fsdevel@vger.kernel.org \
--cc=miklos@szeredi.hu \
--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.