From: Alan Huang <mmpgouride@gmail.com>
To: Jan Hendrik Farr <kernel@jfarr.cc>
Cc: kent.overstreet@linux.dev,
Thorsten Blum <thorsten.blum@toblux.com>,
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
Nathan Chancellor <nathan@kernel.org>,
Bill Wendling <morbo@google.com>, Kees Cook <kees@kernel.org>,
regressions@lists.linux.dev, linux-bcachefs@vger.kernel.org,
linux-hardening@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
ardb@kernel.org, ojeda@kernel.org
Subject: Re: [REGRESSION][BISECTED] erroneous buffer overflow detected in bch2_xattr_validate
Date: Fri, 2 May 2025 02:18:33 +0800 [thread overview]
Message-ID: <DD12E746-2B59-4AF5-B396-4700C6D099F9@gmail.com> (raw)
In-Reply-To: <aBO2XVSisMXtU8nD@archlinux>
> On May 2, 2025, at 01:58, Jan Hendrik Farr <kernel@jfarr.cc> wrote:
>
> On 02 01:28:28, Alan Huang wrote:
>>
>> Thanks,
>> Alan
>>
>>
>>
>>> On May 2, 2025, at 01:22, Jan Hendrik Farr <kernel@jfarr.cc> wrote:
>>>
>>>>
>>>> I wonder if the __counted_by(x_name_len) in struct bch_xattr is needed, since there is also a value after x_name.
>>>
>>> Wait a minute. Are you saying that the value with length x_val_len
>>> is behind the name (of length x_name_len) at the end of the struct.
>>> So essentially the flexible array member x_name has a length of
>>> x_name_len + x_val_len and contains both the name and value?
>>
>> Yes.
>
> I assume you can't easily change the struct such that there exists a member
> that contains the result of x_val_len + x_name_len, correct?
>
> In that case the only available course of action at this time is to
> remove the __counted_by, because it is incorrect.
>
> In addition I would recommend changing the name of x_name to something
> like x_name_and_val or similar. It's very misleading to call it x_name
> when it also contains the value.
>
>>
>>>
>>> If that's the case:
>>>
>>> 1. that's not at all clear from the struct definition
>>> 2. __counted_by(x_name_len) is not correct in that case
>>>
>>
>> Both clang and gcc say:
>>
>> • p->array has at least p->count number of elements available all the time.
>>
>> Note the at least here. Though I think the counted_by is misleading here.
>>
>
> Here's how clang defines __bdos language extension [1]. Also note the
> attribute reference for __counted_by [2]. It assumes that the flexible array
> member contains exactly the amount of elements that are specified.
>
> I guess your quote from the gcc docs is misleading, as gcc's behavior
> is like clang's.
>
> The kernel uses the type & 2 == 0 case.
>
> So let's say you have a simple struct like so:
>
> struct foo{
> int val_len;
> char val[] __counted_by(val_len);
> }
>
> If val_len is 10 then foo->val[10] will be considered out of bounds.
> Even if you did a malloc for enough space.
OK, thanks, I’ll revert that.
>
> [1] https://github.com/llvm/llvm-project/blob/3b88805ca20018ae202afd3aea39f4fa856a8c64/clang/docs/LanguageExtensions.rst?plain=1#L5502-L5507
> [2] https://clang.llvm.org/docs/AttributeReference.html#counted-by-counted-by-or-null-sized-by-sized-by-or-null
>
>
> Best Regards
> Jan
next prev parent reply other threads:[~2025-05-01 18:18 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-26 15:14 Jan Hendrik Farr
2024-09-26 15:28 ` Thorsten Blum
2024-09-26 16:09 ` Thorsten Blum
2024-09-26 16:37 ` Jan Hendrik Farr
2024-09-26 17:01 ` Jan Hendrik Farr
2024-09-26 17:45 ` Jan Hendrik Farr
2024-09-26 19:58 ` Ard Biesheuvel
2024-09-26 22:18 ` Bill Wendling
2024-09-27 1:30 ` Bill Wendling
2024-09-27 3:41 ` Jan Hendrik Farr
2024-09-28 20:50 ` Kees Cook
2024-09-28 23:33 ` Jan Hendrik Farr
2024-09-29 19:59 ` Jan Hendrik Farr
2024-09-28 17:36 ` Jan Hendrik Farr
2024-09-28 17:49 ` Jan Hendrik Farr
2024-09-28 20:34 ` Kees Cook
2024-10-02 9:18 ` Thorsten Blum
2024-10-03 11:33 ` Jan Hendrik Farr
2024-10-03 13:07 ` Thorsten Blum
2024-10-03 13:12 ` Jan Hendrik Farr
2024-10-03 15:02 ` Thorsten Blum
2024-10-03 15:22 ` Jan Hendrik Farr
2024-10-03 15:30 ` Thorsten Blum
2024-10-03 15:35 ` Jan Hendrik Farr
2024-10-03 15:43 ` Thorsten Blum
2024-10-03 16:32 ` Jan Hendrik Farr
2024-10-03 15:17 ` Jan Hendrik Farr
2024-10-03 21:28 ` Kees Cook
2024-10-03 21:48 ` Jan Hendrik Farr
2024-10-04 17:13 ` Kees Cook
2024-10-07 3:56 ` Jan Hendrik Farr
2024-10-07 15:10 ` Jan Hendrik Farr
2024-10-16 21:13 ` Kees Cook
2024-10-16 23:41 ` Bill Wendling
2024-10-17 0:09 ` Bill Wendling
2024-10-17 3:04 ` Jan Hendrik Farr
2024-10-17 16:55 ` Nathan Chancellor
2024-10-17 17:39 ` Miguel Ojeda
2024-10-17 18:55 ` Nathan Chancellor
2024-10-18 11:52 ` Miguel Ojeda
2024-10-21 1:33 ` Jan Hendrik Farr
2024-10-21 6:04 ` Miguel Ojeda
2024-10-21 17:01 ` Jan Hendrik Farr
2024-10-21 19:25 ` Nathan Chancellor
2024-10-24 13:16 ` Jan Hendrik Farr
2024-10-25 1:15 ` Nathan Chancellor
2024-10-25 8:10 ` Miguel Ojeda
2024-10-25 15:27 ` Jan Hendrik Farr
2025-05-01 14:30 ` Alan Huang
2025-05-01 16:45 ` Jan Hendrik Farr
2025-05-01 17:22 ` Jan Hendrik Farr
2025-05-01 17:28 ` Alan Huang
2025-05-01 17:58 ` Jan Hendrik Farr
2025-05-01 18:10 ` Kees Cook
2025-05-01 18:18 ` Alan Huang [this message]
2024-10-17 0:41 ` Jan Hendrik Farr
2024-10-14 21:39 ` Bill Wendling
2024-10-16 1:22 ` Bill Wendling
2024-10-16 2:18 ` Jan Hendrik Farr
2024-10-16 20:43 ` Kees Cook
2024-10-03 21:23 ` Kees Cook
2024-10-03 22:05 ` Jan Hendrik Farr
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=DD12E746-2B59-4AF5-B396-4700C6D099F9@gmail.com \
--to=mmpgouride@gmail.com \
--cc=ardb@kernel.org \
--cc=kees@kernel.org \
--cc=kent.overstreet@linux.dev \
--cc=kernel@jfarr.cc \
--cc=linux-bcachefs@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ojeda@kernel.org \
--cc=regressions@lists.linux.dev \
--cc=thorsten.blum@toblux.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®