summaryrefslogtreecommitdiff
path: root/tools/lib/bpf/libbpf.c
diff options
context:
space:
mode:
authorAndrii Nakryiko <andrii@kernel.org>2025-08-16 02:50:15 +0300
committerAndrii Nakryiko <andrii@kernel.org>2025-08-16 02:52:53 +0300
commit3ec85602f86c694b605ffc1977cad1f56fe1749e (patch)
tree5f77a2546e36eea99eb95d4c3a11d34025be250c /tools/lib/bpf/libbpf.c
parentabdaf49be5424db74e19d167c10d7dad79a0efc2 (diff)
parent7f8fa9d370c11ba2fb296598267e14d3bfe4ea11 (diff)
downloadlinux-3ec85602f86c694b605ffc1977cad1f56fe1749e.tar.xz
Merge branch 'libbpf-fix-reuse-of-devmap'
Yureka Lilian says: ==================== libbpf: fix reuse of DEVMAP changes in v3: - instead of setting BPF_F_RDONLY_PROG on both sides, just clear BPF_F_RDONLY_PROG in map_info.map_flags as suggested by Andrii Nakryiko - in the test, use ASSERT_* instead of CHECK - shorten the test by using open_and_load from the skel - in the test, drop NULL check before unloading/destroying bpf objs - start the commit messages with "libbpf" and "selftests/bpf" respectively instead of just "bpf" changes in v2: - preserve compatibility with older kernels - add a basic selftest covering the re-use of DEVMAP maps ==================== Link: https://patch.msgid.link/20250814180113.1245565-2-yuka@yuka.dev Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
-rw-r--r--tools/lib/bpf/libbpf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 8f5a81b672e1..fe4fc5438678 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -5093,6 +5093,16 @@ static bool map_is_reuse_compat(const struct bpf_map *map, int map_fd)
return false;
}
+ /*
+ * bpf_get_map_info_by_fd() for DEVMAP will always return flags with
+ * BPF_F_RDONLY_PROG set, but it generally is not set at map creation time.
+ * Thus, ignore the BPF_F_RDONLY_PROG flag in the flags returned from
+ * bpf_get_map_info_by_fd() when checking for compatibility with an
+ * existing DEVMAP.
+ */
+ if (map->def.type == BPF_MAP_TYPE_DEVMAP || map->def.type == BPF_MAP_TYPE_DEVMAP_HASH)
+ map_info.map_flags &= ~BPF_F_RDONLY_PROG;
+
return (map_info.type == map->def.type &&
map_info.key_size == map->def.key_size &&
map_info.value_size == map->def.value_size &&