From: Gabriel Krisman Bertazi <krisman@suse.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Eric Biggers <ebiggers@kernel.org>,
tytso@mit.edu, linux-fsdevel@vger.kernel.org,
viro@zeniv.linux.org.uk, jaegeuk@kernel.org
Subject: Re: [PATCH v2] libfs: Attempt exact-match comparison first during casefold lookup
Date: Fri, 19 Jan 2024 11:13:47 -0300 [thread overview]
Message-ID: <87cytx76n8.fsf@mailhost.krisman.be> (raw)
In-Reply-To: <CAHk-=whgQXOouz7KVHKb_SYEo1qujH_1c9TjMLmaQmdbdRE_uw@mail.gmail.com> (Linus Torvalds's message of "Thu, 18 Jan 2024 11:29:31 -0800")
Linus Torvalds <torvalds@linux-foundation.org> writes:
> On Thu, 18 Jan 2024 at 07:42, Gabriel Krisman Bertazi <krisman@suse.de> wrote:
>>
>> But I don't see how this could be a problem. the str pointer itself
>> can't change since it's already a copy of the dentry->d_name pointer; if
>> the string is external, it is guaranteed to exist until the end of the
>> lookup; Finally, If it's inlined, the string can change concurrently
>> which, in the worst case scenario, gives us a false result. But then,
>> VFS will retry, like we do for the case-insensitive comparison right
>> below.
>>
>> ..Right? :)
>
> Wrong, for two subtle reasons.
>
> The issue is not that the string can go away. The issue is that the
> string and the length have been loaded independently - and may not
> match.
>
> So when you do that
>
> if (len == name->len && !memcmp(str, name->name, len))
>
> the 'name->len' you test for equality with 'len' may not match the
> length of the string allocated in 'name->name', because they are two
> different loads of two different values, and we do not hold the lock
> that makes them consistent.
>
> See the big comment (and the READ_ONCE()" in dentry_cmp(), and notice
> how dentry_cmp() intentionally doesn't use 'name->len' at all.
>
I see what you mean. I really appreciate the explanation, by the way.
Thanks for that.
I'll follow up with a v3.
--
Gabriel Krisman Bertazi
prev parent reply other threads:[~2024-01-19 14:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-18 0:46 [PATCH v2] libfs: Attempt exact-match comparison first during casefold lookup Gabriel Krisman Bertazi
2024-01-18 3:50 ` Eric Biggers
2024-01-18 15:42 ` Gabriel Krisman Bertazi
2024-01-18 16:51 ` Gabriel Krisman Bertazi
2024-01-18 19:29 ` Linus Torvalds
2024-01-19 14:13 ` Gabriel Krisman Bertazi [this message]
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=87cytx76n8.fsf@mailhost.krisman.be \
--to=krisman@suse.de \
--cc=ebiggers@kernel.org \
--cc=jaegeuk@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/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.