Re: [PATCH bpf 0/9] Fix various issues with 32-bit libbpf

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

 



On Thu, Aug 13, 2020 at 12:20 PM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:
>
> On Thu, Aug 13, 2020 at 12:17:13AM -0700, Andrii Nakryiko wrote:
> > This patch set contains fixes to libbpf, bpftool, and selftests that were
> > found while testing libbpf and selftests built in 32-bit mode. 64-bit nature
> > of BPF target and 32-bit host environment don't always mix together well
> > without extra care, so there were a bunch of problems discovered and fixed.
> >
> > Each individual patch contains additional explanations, where necessary.
> >
> > This series is really a mix of bpf tree fixes and patches that are better
> > landed into bpf-next, once it opens. This is due to a bit riskier changes and
> > new APIs added to allow solving this 32/64-bit mix problem. It would be great
> > to apply patches #1 through #3 to bpf tree right now, and the rest into
> > bpf-next, but I would appreciate reviewing all of them, of course.
>
> why first three only?
> I think btf__set_pointer_size() and friends are necessary in bpf tree.

I don't mind. The "scariest" change is bpftool's skeleton generation
change, so would be good if you double-check the logic of enforcing at
most 4 byte alignment. But it seems logically sound and safe to me.

> The only thing I would suggest is to rename guess_ptr_size() into
> determine_ptr_size() or something.
> It's not guessing it. Looking for 'long' in BTF is precise.

It was a guess only in the sense that it won't work for LLP64 model,
for instance. But that model is used on Windows platforms, it seems.
Linux sticks to ILP32 and LP64, both of which have sizeof(long) ==
sizeof(void *). I'll rename it to determine_ptr_sz() then.

> We can teach pahole and llvm to always emit 'long' type and libbpf can
> fail parsing BTF if 'long' is not found.

It's always the case for vmlinux BTF, so no need there. As for BPF .o
files, libbpf just enforces 64-bit pointer size anyways. So all
typical cases are covered reliably, I think. It's only for some
non-mainstream use cases where people want to use libbpf's BTF API for
some unconventional uses of BTF. I don't know any of such cases
besides our own selftests, but it's a generic library API, so who
knows :)

We also can do detection based on ELF target architecture, for
btf__parse_elf() API. btf__parse_raw() is a bit less lucky in that
regard.



[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