lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Thu, 13 Aug 2020 13:03:04 -0700
From:   Andrii Nakryiko <>
To:     Alexei Starovoitov <>
Cc:     Andrii Nakryiko <>, bpf <>,
        Networking <>,
        Alexei Starovoitov <>,
        Daniel Borkmann <>,
        Kernel Team <>
Subject: Re: [PATCH bpf 0/9] Fix various issues with 32-bit libbpf

On Thu, Aug 13, 2020 at 12:20 PM Alexei Starovoitov
<> 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

Powered by blists - more mailing lists