iproute2/lib
Paul Chaignon a500c5ac87 lib/bpf: fix map-in-map creation without prepopulation
When creating map-in-maps, the outer map can be prepopulated using the
inner_idx field of inner maps. That field defines the index of the inner
map in the outer map. It is ignored if set to -1.

Commit 6d61a2b557 ("lib: add libbpf support") however started using
that field to identify inner maps. While iterating over all maps looking
for inner maps, maps with inner_idx set to -1 are erroneously skipped.
As a result, trying to create a map-in-map with prepopulation disabled
fails because the inner_id of the outer map is not correctly set.

This bug can be observed with strace -ebpf (notice the zero inner_map_fd
for the outer map creation):

    bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_ARRAY, key_size=4, value_size=130996, max_entries=1, map_flags=0, inner_map_fd=0, map_name="maglev_inner", map_ifindex=0, btf_fd=0, btf_key_type_id=0, btf_value_type_id=0}, 128) = 32
    bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_HASH_OF_MAPS, key_size=2, value_size=4, max_entries=65536, map_flags=BPF_F_NO_PREALLOC, inner_map_fd=0, map_name="maglev_outer", map_ifindex=0, btf_fd=0, btf_key_type_id=0, btf_value_type_id=0}, 128) = -1 EINVAL (Invalid argument)

Fixes: 6d61a2b557 ("lib: add libbpf support")
Signed-off-by: Paul Chaignon <paul@isovalent.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2021-10-14 14:37:51 -07:00
..
Makefile build: Fix link errors on some systems 2021-01-18 12:28:47 -08:00
bpf_glue.c lib: bpf_glue: remove useless assignment 2021-08-10 20:01:54 -07:00
bpf_legacy.c lib/bpf: fix map-in-map creation without prepopulation 2021-10-14 14:37:51 -07:00
bpf_libbpf.c libbpf: fix attach of prog with multiple sections 2021-07-06 16:59:39 -07:00
cg_map.c lib: ignore invalid mounts in cg_init_map 2020-10-11 23:02:35 -07:00
color.c lib/color: make local functions static 2018-11-19 11:42:44 -08:00
coverity_model.c scrub out whitespace issues 2016-03-27 10:50:14 -07:00
exec.c netns: switch netns in the child when executing commands 2019-06-20 14:30:41 -07:00
fs.c Merge branch 'main' into next 2021-07-01 14:29:42 +00:00
inet_proto.c ip: add a new parameter -Numeric 2019-06-18 08:37:47 -07:00
json_print.c json_print: Add print_tv() 2021-03-19 15:00:08 +00:00
json_print_math.c build: Fix link errors on some systems 2021-01-18 12:28:47 -08:00
json_writer.c json: fix backslash escape typo in jsonw_puts 2019-07-19 10:48:38 -07:00
libgenl.c libgenl: make genl_add_mcast_grp set errno on error 2021-05-17 11:59:37 -07:00
libnetlink.c ipmonitor: Fix recvmsg with ancillary data 2021-07-17 11:13:36 -07:00
ll_addr.c lib/ll_addr: whitespace and indent cleanup 2018-11-19 11:42:44 -08:00
ll_map.c ip: allow to use alternative names as handle 2019-10-28 07:35:29 -07:00
ll_proto.c m_mpls: add mac_push action 2020-10-20 08:57:08 -06:00
ll_types.c ip: add a new parameter -Numeric 2019-06-18 08:37:47 -07:00
mnl_utils.c utils: Introduce helper routines for generic socket recv 2021-03-03 04:00:04 +00:00
mpls_ntop.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
mpls_pton.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
names.c tc: drop unused name_to_id function 2018-11-19 11:42:44 -08:00
namespace.c lib/namespace: fix ip -all netns return code 2021-02-22 18:17:56 -08:00
rt_names.c lib: rt_names: Add rtnl_dsfield_get_name() 2021-01-18 04:09:29 +00:00
utils.c ip: remove leftovers from IPX and DECnet 2021-09-01 14:03:53 -07:00
utils_math.c build: Fix link errors on some systems 2021-01-18 12:28:47 -08:00