Patch "libbpf: Fix the name of a reused map" has been added to the 5.19-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    libbpf: Fix the name of a reused map

to the 5.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     libbpf-fix-the-name-of-a-reused-map.patch
and it can be found in the queue-5.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit aff0b622c47264fd5e58e57e2ee4bb61d79f3441
Author: Anquan Wu <leiqi96@xxxxxxxxxxx>
Date:   Tue Jul 12 11:15:40 2022 +0800

    libbpf: Fix the name of a reused map
    
    [ Upstream commit bf3f00378524adae16628cbadbd11ba7211863bb ]
    
    BPF map name is limited to BPF_OBJ_NAME_LEN.
    A map name is defined as being longer than BPF_OBJ_NAME_LEN,
    it will be truncated to BPF_OBJ_NAME_LEN when a userspace program
    calls libbpf to create the map. A pinned map also generates a path
    in the /sys. If the previous program wanted to reuse the map,
    it can not get bpf_map by name, because the name of the map is only
    partially the same as the name which get from pinned path.
    
    The syscall information below show that map name "process_pinned_map"
    is truncated to "process_pinned_".
    
        bpf(BPF_OBJ_GET, {pathname="/sys/fs/bpf/process_pinned_map",
        bpf_fd=0, file_flags=0}, 144) = -1 ENOENT (No such file or directory)
    
        bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_HASH, key_size=4,
        value_size=4,max_entries=1024, map_flags=0, inner_map_fd=0,
        map_name="process_pinned_",map_ifindex=0, btf_fd=3, btf_key_type_id=6,
        btf_value_type_id=10,btf_vmlinux_value_type_id=0}, 72) = 4
    
    This patch check that if the name of pinned map are the same as the
    actual name for the first (BPF_OBJ_NAME_LEN - 1),
    bpf map still uses the name which is included in bpf object.
    
    Fixes: 26736eb9a483 ("tools: libbpf: allow map reuse")
    Signed-off-by: Anquan Wu <leiqi96@xxxxxxxxxxx>
    Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx>
    Link: https://lore.kernel.org/bpf/OSZP286MB1725CEA1C95C5CB8E7CCC53FB8869@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index b9245bf688fa..5b9b42ab7aa0 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -4327,7 +4327,7 @@ int bpf_map__set_autocreate(struct bpf_map *map, bool autocreate)
 int bpf_map__reuse_fd(struct bpf_map *map, int fd)
 {
 	struct bpf_map_info info = {};
-	__u32 len = sizeof(info);
+	__u32 len = sizeof(info), name_len;
 	int new_fd, err;
 	char *new_name;
 
@@ -4337,7 +4337,12 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
 	if (err)
 		return libbpf_err(err);
 
-	new_name = strdup(info.name);
+	name_len = strlen(info.name);
+	if (name_len == BPF_OBJ_NAME_LEN - 1 && strncmp(map->name, info.name, name_len) == 0)
+		new_name = strdup(map->name);
+	else
+		new_name = strdup(info.name);
+
 	if (!new_name)
 		return libbpf_err(-errno);
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux