Commit 05e9bd3
libbpf: fix error when st-prefix_ops and ops from differ btf
When a module registers a struct_ops, the struct_ops type and its
corresponding map_value type ("bpf_struct_ops_") may reside in different
btf objects, here are four possible case:
+--------+---------------+-------------+---------------------------------+
| |bpf_struct_ops_| xxx_ops | |
+--------+---------------+-------------+---------------------------------+
| case 0 | btf_vmlinux | bft_vmlinux | be used and reg only in vmlinux |
+--------+---------------+-------------+---------------------------------+
| case 1 | btf_vmlinux | mod_btf | INVALID |
+--------+---------------+-------------+---------------------------------+
| case 2 | mod_btf | btf_vmlinux | reg in mod but be used both in |
| | | | vmlinux and mod. |
+--------+---------------+-------------+---------------------------------+
| case 3 | mod_btf | mod_btf | be used and reg only in mod |
+--------+---------------+-------------+---------------------------------+
Currently we figure out the mod_btf by searching with the struct_ops type,
which makes it impossible to figure out the mod_btf when the struct_ops
type is in btf_vmlinux while it's corresponding map_value type is in
mod_btf (case 2).
The fix is to use the corresponding map_value type ("bpf_struct_ops_")
as the lookup anchor instead of the struct_ops type to figure out the
`btf` and `mod_btf` via find_ksym_btf_id(), and then we can locate
the kern_type_id via btf__find_by_name_kind() with the `btf` we just
obtained from find_ksym_btf_id().
With this change the lookup obtains the correct btf and mod_btf for case 2,
preserves correct behavior for other valid cases, and still fails as
expected for the invalid scenario (case 1).
Fixes: 590a008 ("bpf: libbpf: Add STRUCT_OPS support")
Signed-off-by: D. Wythe <[email protected]>
Acked-by: Andrii Nakryiko <[email protected]>1 parent 77743ac commit 05e9bd3
1 file changed
+18
-19
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1018 | 1018 | | |
1019 | 1019 | | |
1020 | 1020 | | |
1021 | | - | |
| 1021 | + | |
1022 | 1022 | | |
1023 | 1023 | | |
1024 | 1024 | | |
1025 | 1025 | | |
1026 | 1026 | | |
1027 | | - | |
1028 | | - | |
1029 | | - | |
1030 | | - | |
1031 | | - | |
1032 | | - | |
1033 | | - | |
1034 | | - | |
| 1027 | + | |
| 1028 | + | |
1035 | 1029 | | |
1036 | | - | |
1037 | | - | |
1038 | | - | |
1039 | | - | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
1040 | 1034 | | |
1041 | | - | |
1042 | | - | |
| 1035 | + | |
1043 | 1036 | | |
1044 | | - | |
1045 | | - | |
| 1037 | + | |
1046 | 1038 | | |
1047 | 1039 | | |
1048 | 1040 | | |
1049 | 1041 | | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
1050 | 1049 | | |
1051 | 1050 | | |
1052 | 1051 | | |
| |||
1059 | 1058 | | |
1060 | 1059 | | |
1061 | 1060 | | |
1062 | | - | |
1063 | | - | |
| 1061 | + | |
| 1062 | + | |
1064 | 1063 | | |
1065 | 1064 | | |
1066 | 1065 | | |
| |||
0 commit comments