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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 25, 2024 at 09:43:40PM +0800, Xin Liu wrote:
> On Wed, 24 Apr 2024 15:35:38 -0700 Yonghong Song <yonghong.song@xxxxxxxxx> 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@xxxxxxxxxx/
> >   [3] https://lore.kernel.org/bpf/20230426055030.3743074-1-yhs@xxxxxx/
> > 
> > Cc: Xin Liu <liuxin350@xxxxxxxxxx>
> > Cc: Alan Maguire <alan.maguire@xxxxxxxxxx>
> > Signed-off-by: Yonghong Song <yonghong.song@xxxxxxxxx>
> 
> Reviewed-by: Xin Liu <liuxin350@xxxxxxxxxx>

Thanks, applied to next,

- Arnaldo
 
> > ---
> >  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;
> >  	}




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux