All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yonghong Song <yhs@meta.com>
To: Nick Desaulniers <ndesaulniers@google.com>, Yonghong Song <yhs@fb.com>
Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>,
	dwarves@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	bpf@vger.kernel.org, Daniel Borkmann <daniel@iogearbox.net>,
	Eduard Zingerman <eddyz87@gmail.com>,
	kernel-team@fb.com,
	Satya Durga Srinivasu Prabhala <quic_satyap@quicinc.com>
Subject: Re: [PATCH dwarves] btf_encoder: Fix a dwarf type DW_ATE_unsigned_1024 to btf encoding issue
Date: Wed, 26 Apr 2023 13:49:46 -0700	[thread overview]
Message-ID: <632e7eb5-dcd9-5863-da59-30d7a27aceda@meta.com> (raw)
In-Reply-To: <CAKwvOdnXh0e0F=_5nuVcMNsHAkqkc+K5FrOmktFZ76z3X_zHug@mail.gmail.com>



On 4/26/23 11:09 AM, Nick Desaulniers wrote:
> On Tue, Apr 25, 2023 at 10:50 PM Yonghong Song <yhs@fb.com> wrote:
>>
>> Nick Desaulniers reported an issue ([1]) where an 128-byte sized type
>> (DW_ATE_unsigned_1024) cannot be encoded into BTF with failure message
>> likes below:
>>    $ pahole -J reduced.o
>>    [2] INT DW_ATE_unsigned_1024 Error emitting BTF type
>>    Encountered error while encoding BTF.
>> See [1] for how to reproduce the issue.
>>
>> The failure is due to currently BTF int type only supports upto 16
>> bytes (__int128) and in this case the dwarf int type is 128-byte.
>>
>> The DW_ATE_unsigned_1024 is not a normal type for variable/func
>> declaration etc. It is used in DW_AT_location. There are two
>> ways to resolve this issue.
>>    (1). If btf encoding is expected, remove all dwarf int types
>>         where btf encoding will failure, e.g., non-power-of-2
>>         bytes, or greater than 16 bytes.
>>    (2). do a sanitization in btf_encoder ([2]).
>>
>> This patch uses method (2) since it is a simple fix in btf_encoder.
>> I checked my local built vmlinux with latest
>> bpf-next. There is only one instance of DW_ATE_unsigned_24 (used in
>> DW_AT_location) so I expect irregular int types should be very rare.
>>
>>    [1] https://github.com/libbpf/libbpf/pull/680
>>    [2] commit 7d8e829f636f ("btf_encoder: Sanitize non-regular int base type")
>>
>> Signed-off-by: Yonghong Song <yhs@fb.com>
> 
> Thanks, this fixed the above reported error for me.  My report is just
> forwarded from Satya.
> 
> Reported-by: Satya Durga Srinivasu Prabhala <quic_satyap@quicinc.com>
> Tested-by: Nick Desaulniers <ndesaulniers@google.com>
> 
> I don't know if that change has other implications for unusual byte sizes.
> 
> We might need to consider at some point waiting to validate
> DW_TAG_base_type until we know that they're not used outside of
> DW_AT_location expressions.

David Blaikie confirmed that indeed special types like 
DW_ATE_unsigned_1024 is indeed generated for DW_AT_location.
See https://github.com/libbpf/libbpf/pull/680 for details.

> 
>> ---
>>   btf_encoder.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/btf_encoder.c b/btf_encoder.c
>> index 65f6e71..1aa0ad0 100644
>> --- a/btf_encoder.c
>> +++ b/btf_encoder.c
>> @@ -394,7 +394,7 @@ static int32_t btf_encoder__add_base_type(struct btf_encoder *encoder, const str
>>           * these non-regular int types to avoid libbpf/kernel complaints.
>>           */
>>          byte_sz = BITS_ROUNDUP_BYTES(bt->bit_size);
>> -       if (!byte_sz || (byte_sz & (byte_sz - 1))) {
>> +       if (!byte_sz || (byte_sz & (byte_sz - 1)) || byte_sz > 16) {
>>                  name = "__SANITIZED_FAKE_INT__";
>>                  byte_sz = 4;
>>          }
>> --
>> 2.34.1
>>
> 
> 

      reply	other threads:[~2023-04-26 20:50 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-26  5:50 [PATCH dwarves] btf_encoder: Fix a dwarf type DW_ATE_unsigned_1024 to btf encoding issue Yonghong Song
2023-04-26 18:09 ` Nick Desaulniers
2023-04-26 20:49   ` Yonghong Song [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=632e7eb5-dcd9-5863-da59-30d7a27aceda@meta.com \
    --to=yhs@meta.com \
    --cc=andrii@kernel.org \
    --cc=arnaldo.melo@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dwarves@vger.kernel.org \
    --cc=eddyz87@gmail.com \
    --cc=kernel-team@fb.com \
    --cc=ndesaulniers@google.com \
    --cc=quic_satyap@quicinc.com \
    --cc=yhs@fb.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 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.