libbpf: Sanitise map names before pinning
authorToke Høiland-Jørgensen <toke@redhat.com>
Thu, 3 Dec 2020 09:33:06 +0000 (10:33 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Thu, 3 Dec 2020 19:57:42 +0000 (11:57 -0800)
commit9cf309c56f7910a81fbe053b6f11c3b1f0987b12
treec8ba9f5f5bb6493db5f9431d82df036d370646a4
parent80b2b5c3a701d56de98d00d99bc9cc384fb316d9
libbpf: Sanitise map names before pinning

When we added sanitising of map names before loading programs to libbpf, we
still allowed periods in the name. While the kernel will accept these for
the map names themselves, they are not allowed in file names when pinning
maps. This means that bpf_object__pin_maps() will fail if called on an
object that contains internal maps (such as sections .rodata).

Fix this by replacing periods with underscores when constructing map pin
paths. This only affects the paths generated by libbpf when
bpf_object__pin_maps() is called with a path argument. Any pin paths set
by bpf_map__set_pin_path() are unaffected, and it will still be up to the
caller to avoid invalid characters in those.

Fixes: 113e6b7e15e2 ("libbpf: Sanitise internal map names so they are not rejected by the kernel")
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20201203093306.107676-1-toke@redhat.com
tools/lib/bpf/libbpf.c