Re: [PATCH dwarves] btf_encoder: Fix dwarf int type with greater-than-16 byte issue

Xin Liu
2024-04-25T13:44:39Z

On Wed, 24 Apr 2024 15:35:38 -0700 Yonghong Song <yonghong.song@linux.dev> wrote:
> Nick Desaulniers and Xin Liu separately reported that int type might
> have greater-than-16 byte size ([1] and [2]). More specifically, the
> reported int type sizes are 1024 and 64 bytes.
>
> The libbpf and bpf program does not really support any int type greater
> than 16 bytes. Therefore, with current pahole, btf encoding will fail
> with greater-than-16 byte int types.
>
> Since for now bpf does not support '> 16' bytes int type, the simplest
> way is to sanitize such types, similar to existing conditions like
> '!byte_sz' and 'byte_sz & (byte_sz - 1)'. This way, pahole won't
> call libbpf with an unsupported int type size. The patch [3] was
> proposed before. Now I resubmitted this patch as there are another
> failure due to the same issue.
>
> [1] https://github.com/libbpf/libbpf/pull/680
> [2] https://lore.kernel.org/bpf/20240422144538.351722-1-liuxin350@huawei.com/
> [3] https://lore.kernel.org/bpf/20230426055030.3743074-1-yhs@fb.com/
>
> Cc: Xin Liu <liuxin350@huawei.com>
> Cc: Alan Maguire <alan.maguire@oracle.com>
> Signed-off-by: Yonghong Song <yonghong.song@linux.dev>

Reviewed-by: Xin Liu <liuxin350@huawei.com>

> ---
> btf_encoder.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/btf_encoder.c b/btf_encoder.c
> index e1e3529..19e9d90 100644
> --- a/btf_encoder.c
> +++ b/btf_encoder.c
> @@ -393,7 +393,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;
> }