bpftool: Fix error check when calling hashmap__new()

hashmap__new() encodes errors with ERR_PTR(), hence it's not valid to
check the returned pointer against NULL and IS_ERR() has to be used
instead.

libbpf_get_error() can't be used in this case as hashmap__new() is not
part of the public libbpf API and it'll continue using ERR_PTR() after
libbpf 1.0.

Fixes: 8f184732b6 ("bpftool: Switch to libbpf's hashmap for pinned paths of BPF objects")
Fixes: 2828d0d75b ("bpftool: Switch to libbpf's hashmap for programs/maps in BTF listing")
Fixes: d6699f8e0f ("bpftool: Switch to libbpf's hashmap for PIDs/names references")
Signed-off-by: Mauricio Vásquez <mauricio@kinvolk.io>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20220107152620.192327-2-mauricio@kinvolk.io
This commit is contained in:
Mauricio Vásquez 2022-01-07 10:26:20 -05:00 committed by Andrii Nakryiko
parent fba60b171a
commit 622a5b582c
5 changed files with 7 additions and 5 deletions

View File

@ -902,7 +902,7 @@ static int do_show(int argc, char **argv)
equal_fn_for_key_as_id, NULL); equal_fn_for_key_as_id, NULL);
btf_map_table = hashmap__new(hash_fn_for_key_as_id, btf_map_table = hashmap__new(hash_fn_for_key_as_id,
equal_fn_for_key_as_id, NULL); equal_fn_for_key_as_id, NULL);
if (!btf_prog_table || !btf_map_table) { if (IS_ERR(btf_prog_table) || IS_ERR(btf_map_table)) {
hashmap__free(btf_prog_table); hashmap__free(btf_prog_table);
hashmap__free(btf_map_table); hashmap__free(btf_map_table);
if (fd >= 0) if (fd >= 0)

View File

@ -2,6 +2,7 @@
/* Copyright (C) 2020 Facebook */ /* Copyright (C) 2020 Facebook */
#include <errno.h> #include <errno.h>
#include <linux/err.h>
#include <net/if.h> #include <net/if.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@ -306,7 +307,7 @@ static int do_show(int argc, char **argv)
if (show_pinned) { if (show_pinned) {
link_table = hashmap__new(hash_fn_for_key_as_id, link_table = hashmap__new(hash_fn_for_key_as_id,
equal_fn_for_key_as_id, NULL); equal_fn_for_key_as_id, NULL);
if (!link_table) { if (IS_ERR(link_table)) {
p_err("failed to create hashmap for pinned paths"); p_err("failed to create hashmap for pinned paths");
return -1; return -1;
} }

View File

@ -699,7 +699,7 @@ static int do_show(int argc, char **argv)
if (show_pinned) { if (show_pinned) {
map_table = hashmap__new(hash_fn_for_key_as_id, map_table = hashmap__new(hash_fn_for_key_as_id,
equal_fn_for_key_as_id, NULL); equal_fn_for_key_as_id, NULL);
if (!map_table) { if (IS_ERR(map_table)) {
p_err("failed to create hashmap for pinned paths"); p_err("failed to create hashmap for pinned paths");
return -1; return -1;
} }

View File

@ -1,6 +1,7 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
/* Copyright (C) 2020 Facebook */ /* Copyright (C) 2020 Facebook */
#include <errno.h> #include <errno.h>
#include <linux/err.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -101,7 +102,7 @@ int build_obj_refs_table(struct hashmap **map, enum bpf_obj_type type)
libbpf_print_fn_t default_print; libbpf_print_fn_t default_print;
*map = hashmap__new(hash_fn_for_key_as_id, equal_fn_for_key_as_id, NULL); *map = hashmap__new(hash_fn_for_key_as_id, equal_fn_for_key_as_id, NULL);
if (!*map) { if (IS_ERR(*map)) {
p_err("failed to create hashmap for PID references"); p_err("failed to create hashmap for PID references");
return -1; return -1;
} }

View File

@ -641,7 +641,7 @@ static int do_show(int argc, char **argv)
if (show_pinned) { if (show_pinned) {
prog_table = hashmap__new(hash_fn_for_key_as_id, prog_table = hashmap__new(hash_fn_for_key_as_id,
equal_fn_for_key_as_id, NULL); equal_fn_for_key_as_id, NULL);
if (!prog_table) { if (IS_ERR(prog_table)) {
p_err("failed to create hashmap for pinned paths"); p_err("failed to create hashmap for pinned paths");
return -1; return -1;
} }