tools: bpftool: warn about risky prog array updates
authorJakub Kicinski <jakub.kicinski@netronome.com>
Mon, 28 Jan 2019 18:29:15 +0000 (10:29 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 28 Jan 2019 23:27:38 +0000 (00:27 +0100)
When prog array is updated with bpftool users often refer
to the map via the ID.  Unfortunately, that's likely
to lead to confusion because prog arrays get flushed when
the last user reference is gone.  If there is no other
reference bpftool will create one, update successfully
just to close the map again and have it flushed.

Warn about this case in non-JSON mode.

If the problem continues causing confusion we can remove
the support for referring to a map by ID for prog array
update completely.  For now it seems like the potential
inconvenience to users who know what they're doing outweighs
the benefit.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/bpf/bpftool/map.c

index f15c520195b72d8d47bef865a416fc559fdba803..2160a8ef17e52af6bef320d198da7451f285d227 100644 (file)
@@ -426,6 +426,9 @@ static int parse_elem(char **argv, struct bpf_map_info *info,
                                p_err("not enough value arguments for map of progs");
                                return -1;
                        }
+                       if (is_prefix(*argv, "id"))
+                               p_info("Warning: updating program array via MAP_ID, make sure this map is kept open\n"
+                                      "         by some process or pinned otherwise update will be lost");
 
                        fd = prog_parse_fd(&argc, &argv);
                        if (fd < 0)