Re: Calling kfuncs in modules - BTF mismatch?

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

 



Em Tue, Nov 29, 2022 at 04:21:23PM +0000, Alan Maguire escreveu:
> On 13/11/2022 18:04, Toke Høiland-Jørgensen wrote:
> > Lorenzo Bianconi <lorenzo.bianconi@xxxxxxxxxx> writes:
> > 
> >>>
> >>> Hi everyone
> >>>
> >>> There seems to be some issue with BTF mismatch when trying to run the
> >>> bpf_ct_set_nat_info() kfunc from a module. I was under the impression
> >>> that this is supposed to work, so is there some kind of BTF dedup issue
> >>> here or something?
> >>>
> >>> Steps to reproduce:
> >>>
> >>> 1. Compile kernel with nf_conntrack built-in and run selftests;
> >>>    './test_progs -a bpf_nf' works
> >>>
> >>> 2. Change the kernel config so nf_conntrack is build as a module
> >>>
> >>> 3. Start the test kernel and manually modprobe nf_conntrack and nf_nat
> >>>
> >>> 4. Run ./test_progs -a bpf_nf; this now fails with an error like:
> >>>
> >>> kernel function bpf_ct_set_nat_info args#0 expected pointer to STRUCT nf_conn___init but R1 has a pointer to STRUCT nf_conn___init
> >>
> >> This week Kumar and I took a look at this issue and we ended up
> >> identifying a duplication of nf_conn___init structure. In particular:
> >>
> >> [~/workspace/bpf-next]$ bpftool btf --base-btf vmlinux dump file
> >> net/netfilter/nf_conntrack.ko format raw | grep nf_conn__
> >> [110941] STRUCT 'nf_conn___init' size=248 vlen=1
> >> [~/workspace/bpf-next]$ bpftool btf --base-btf vmlinux dump file
> >> net/netfilter/nf_nat.ko format raw | grep nf_conn__
> >> [107488] STRUCT 'nf_conn___init' size=248 vlen=1
> >>
> >> Is it the root cause of the problem?
> > 
> > It certainly seems to be related to it, at least. Amending the log
> > message to include the BTF object IDs of the two versions shows that the
> > register has a reference to nf_conn__init in nf_conntrack.ko, while the kernel
> > expects it to point to nf_nat.ko.
> > 
> > Not sure what's the right fix for this? Should libbpf be smart enough to
> > pull the kfunc arg ID from the same BTF ID as the function itself? Or
> > should the kernel compare structs and allow things if they're identical?
> > Andrii, WDYT?
> > 
> 
> There were some dedup issues fixed recently in pahole
> and libbpf; since dwarves libbpf hasn't been synced with
> libbpf recently as far as I can see it won't have the fix 
> for [1]; I suspect it may help with dedup-ing here. Would 
> probably be worth trying rebuilding dwarves with a libbpf 
> with [1] applied and seeing if the dedup issue goes away
> before we go any further. If it fixes the issue, would it
> be worth updating the libbpf that dwarves uses Arnaldo?
> I saw some pretty large improvements in removing
> redundant definitions.

Feel free to send a patch updating the libbpf copy in pahole, so that I
can go on testing it.

I'm working on supporting DW_TAG_imported_unit and split DWARF (.dwz) so
as soon as I get that properly tested and make sure it doesn't regresses
wrt BTF encoding I'll cut a new version.

- Arnaldo



[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