On Sun, Oct 29, 2023 at 4:22 PM Daniel Xu <dxu@xxxxxxxxx> wrote: > > On Fri, Oct 27, 2023 at 01:33:09PM -0700, Andrii Nakryiko wrote: > > On Fri, Oct 27, 2023 at 11:46 AM Daniel Xu <dxu@xxxxxxxxx> wrote: > > > > > > Switching to vmlinux.h definitions seems to make the verifier very > > > unhappy with bitfield accesses. The error is: > > > > > > ; md.u.md2.dir = direction; > > > 33: (69) r1 = *(u16 *)(r2 +11) > > > misaligned stack access off (0x0; 0x0)+-64+11 size 2 > > > > > > It looks like disabling CO-RE relocations seem to make the error go > > > away. > > > > > > > for accessing bitfields libbpf provides > > BPF_CORE_READ_BITFIELD_PROBED() and BPF_CORE_READ_BITFIELD() macros > > In this case the code in question is: > > __u8 direction = 0; > md.u.md2.dir = direction; > > IOW the problem is assigning to bitfields, not reading from them. > > Is that something that libbpf needs to support as well? Ah, I missed that this is a write into a struct. I think we can support BPF_CORE_WRITE_BITFIELD() (not the PROBED version, though) using all the same CO-RE relocations. It's probably a very niche case, but BPF_CORE_READ_BITFIELD() is niche as well (though an absolute necessity when the need does come up). > > Thanks, > Daniel