bpftool: clean-up usage of libbpf_get_error()
authorSahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
Sun, 20 Nov 2022 11:26:32 +0000 (11:26 +0000)
committerAlexei Starovoitov <ast@kernel.org>
Mon, 21 Nov 2022 00:17:46 +0000 (16:17 -0800)
bpftool is now totally compliant with libbpf 1.0 mode and is not
expected to be compiled with pre-1.0, let's clean-up the usage of
libbpf_get_error().

The changes stay aligned with returned errors always negative.

- In tools/bpf/bpftool/btf.c This fixes an uninitialized local
variable `err` in function do_dump() because it may now be returned
without having been set.
- This also removes the checks on NULL pointers before calling
btf__free() because that function already does the check.

Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
Link: https://lore.kernel.org/r/20221120112515.38165-5-sahid.ferdjaoui@industrialdiscipline.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/bpf/bpftool/btf.c
tools/bpf/bpftool/btf_dumper.c
tools/bpf/bpftool/gen.c
tools/bpf/bpftool/iter.c
tools/bpf/bpftool/main.c
tools/bpf/bpftool/map.c
tools/bpf/bpftool/prog.c
tools/bpf/bpftool/struct_ops.c

index b87e4a7fd68960cb39c4cecd53e56077403957e5..352290ba7b29b3861b535c85c0c4042825945401 100644 (file)
@@ -467,9 +467,8 @@ static int dump_btf_c(const struct btf *btf,
        int err = 0, i;
 
        d = btf_dump__new(btf, btf_dump_printf, NULL, NULL);
-       err = libbpf_get_error(d);
-       if (err)
-               return err;
+       if (!d)
+               return -errno;
 
        printf("#ifndef __VMLINUX_H__\n");
        printf("#define __VMLINUX_H__\n");
@@ -512,11 +511,9 @@ static struct btf *get_vmlinux_btf_from_sysfs(void)
        struct btf *base;
 
        base = btf__parse(sysfs_vmlinux, NULL);
-       if (libbpf_get_error(base)) {
-               p_err("failed to parse vmlinux BTF at '%s': %ld\n",
-                     sysfs_vmlinux, libbpf_get_error(base));
-               base = NULL;
-       }
+       if (!base)
+               p_err("failed to parse vmlinux BTF at '%s': %d\n",
+                     sysfs_vmlinux, -errno);
 
        return base;
 }
@@ -559,7 +556,7 @@ static int do_dump(int argc, char **argv)
        __u32 btf_id = -1;
        const char *src;
        int fd = -1;
-       int err;
+       int err = 0;
 
        if (!REQ_ARGS(2)) {
                usage();
@@ -634,8 +631,8 @@ static int do_dump(int argc, char **argv)
                        base = get_vmlinux_btf_from_sysfs();
 
                btf = btf__parse_split(*argv, base ?: base_btf);
-               err = libbpf_get_error(btf);
                if (!btf) {
+                       err = -errno;
                        p_err("failed to load BTF from %s: %s",
                              *argv, strerror(errno));
                        goto done;
@@ -681,8 +678,8 @@ static int do_dump(int argc, char **argv)
                }
 
                btf = btf__load_from_kernel_by_id_split(btf_id, base_btf);
-               err = libbpf_get_error(btf);
                if (!btf) {
+                       err = -errno;
                        p_err("get btf by id (%u): %s", btf_id, strerror(errno));
                        goto done;
                }
index 19924b6ce796f6489abec2b1259bdebfc0504f99..eda71fdfe95a4f89f109c6bb57f1529ba77e95dc 100644 (file)
@@ -75,7 +75,7 @@ static int dump_prog_id_as_func_ptr(const struct btf_dumper *d,
                goto print;
 
        prog_btf = btf__load_from_kernel_by_id(info.btf_id);
-       if (libbpf_get_error(prog_btf))
+       if (!prog_btf)
                goto print;
        func_type = btf__type_by_id(prog_btf, finfo.type_id);
        if (!func_type || !btf_is_func(func_type))
index 01bb8d8f556826be7a529c1c0e84c973bd24fb45..2883660d6b6728ae6827a091fad576b6224b8b5f 100644 (file)
@@ -252,9 +252,8 @@ static int codegen_datasecs(struct bpf_object *obj, const char *obj_name)
        int err = 0;
 
        d = btf_dump__new(btf, codegen_btf_dump_printf, NULL, NULL);
-       err = libbpf_get_error(d);
-       if (err)
-               return err;
+       if (!d)
+               return -errno;
 
        bpf_object__for_each_map(map, obj) {
                /* only generate definitions for memory-mapped internal maps */
@@ -976,13 +975,12 @@ static int do_skeleton(int argc, char **argv)
                /* log_level1 + log_level2 + stats, but not stable UAPI */
                opts.kernel_log_level = 1 + 2 + 4;
        obj = bpf_object__open_mem(obj_data, file_sz, &opts);
-       err = libbpf_get_error(obj);
-       if (err) {
+       if (!obj) {
                char err_buf[256];
 
+               err = -errno;
                libbpf_strerror(err, err_buf, sizeof(err_buf));
                p_err("failed to open BPF object file: %s", err_buf);
-               obj = NULL;
                goto out;
        }
 
index a3e6b167153dbd347b44b4b2738304c4180b4a13..9a1d2365a29743baeab5d46ee75e5bfcde5a25cb 100644 (file)
@@ -4,6 +4,7 @@
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
 #endif
+#include <errno.h>
 #include <unistd.h>
 #include <linux/err.h>
 #include <bpf/libbpf.h>
@@ -48,8 +49,8 @@ static int do_pin(int argc, char **argv)
        }
 
        obj = bpf_object__open(objfile);
-       err = libbpf_get_error(obj);
-       if (err) {
+       if (!obj) {
+               err = -errno;
                p_err("can't open objfile %s", objfile);
                goto close_map_fd;
        }
@@ -62,13 +63,14 @@ static int do_pin(int argc, char **argv)
 
        prog = bpf_object__next_program(obj, NULL);
        if (!prog) {
+               err = -errno;
                p_err("can't find bpf program in objfile %s", objfile);
                goto close_obj;
        }
 
        link = bpf_program__attach_iter(prog, &iter_opts);
-       err = libbpf_get_error(link);
-       if (err) {
+       if (!link) {
+               err = -errno;
                p_err("attach_iter failed for program %s",
                      bpf_program__name(prog));
                goto close_obj;
index c53c553adcac99f9301c27f9e2f1b8ed2a3b141b..08d0ac543c6746087a2952a973b612a37f67dd14 100644 (file)
@@ -510,10 +510,9 @@ int main(int argc, char **argv)
                        break;
                case 'B':
                        base_btf = btf__parse(optarg, NULL);
-                       if (libbpf_get_error(base_btf)) {
-                               p_err("failed to parse base BTF at '%s': %ld\n",
-                                     optarg, libbpf_get_error(base_btf));
-                               base_btf = NULL;
+                       if (!base_btf) {
+                               p_err("failed to parse base BTF at '%s': %d\n",
+                                     optarg, -errno);
                                return -1;
                        }
                        break;
index d884070a231471735bf965f259614bea7f8a54bc..eb362bd3d2c9a104328b52076fb477deb4800827 100644 (file)
@@ -786,18 +786,18 @@ static int get_map_kv_btf(const struct bpf_map_info *info, struct btf **btf)
        if (info->btf_vmlinux_value_type_id) {
                if (!btf_vmlinux) {
                        btf_vmlinux = libbpf_find_kernel_btf();
-                       err = libbpf_get_error(btf_vmlinux);
-                       if (err) {
+                       if (!btf_vmlinux) {
                                p_err("failed to get kernel btf");
-                               return err;
+                               return -errno;
                        }
                }
                *btf = btf_vmlinux;
        } else if (info->btf_value_type_id) {
                *btf = btf__load_from_kernel_by_id(info->btf_id);
-               err = libbpf_get_error(*btf);
-               if (err)
+               if (!*btf) {
+                       err = -errno;
                        p_err("failed to get btf");
+               }
        } else {
                *btf = NULL;
        }
@@ -807,14 +807,13 @@ static int get_map_kv_btf(const struct bpf_map_info *info, struct btf **btf)
 
 static void free_map_kv_btf(struct btf *btf)
 {
-       if (!libbpf_get_error(btf) && btf != btf_vmlinux)
+       if (btf != btf_vmlinux)
                btf__free(btf);
 }
 
 static void free_btf_vmlinux(void)
 {
-       if (!libbpf_get_error(btf_vmlinux))
-               btf__free(btf_vmlinux);
+       btf__free(btf_vmlinux);
 }
 
 static int
index 2266958f203fa5067fffef8bbd39707b042b77ff..cfc9fdc1e8634f953d67ff5e1758ee09321fc1a8 100644 (file)
@@ -322,7 +322,7 @@ static void show_prog_metadata(int fd, __u32 num_maps)
                return;
 
        btf = btf__load_from_kernel_by_id(map_info.btf_id);
-       if (libbpf_get_error(btf))
+       if (!btf)
                goto out_free;
 
        t_datasec = btf__type_by_id(btf, map_info.btf_value_type_id);
@@ -726,7 +726,7 @@ prog_dump(struct bpf_prog_info *info, enum dump_mode mode,
 
        if (info->btf_id) {
                btf = btf__load_from_kernel_by_id(info->btf_id);
-               if (libbpf_get_error(btf)) {
+               if (!btf) {
                        p_err("failed to get btf");
                        return -1;
                }
@@ -1663,7 +1663,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
                open_opts.kernel_log_level = 1 + 2 + 4;
 
        obj = bpf_object__open_file(file, &open_opts);
-       if (libbpf_get_error(obj)) {
+       if (!obj) {
                p_err("failed to open object file");
                goto err_free_reuse_maps;
        }
@@ -1882,7 +1882,7 @@ static int do_loader(int argc, char **argv)
                open_opts.kernel_log_level = 1 + 2 + 4;
 
        obj = bpf_object__open_file(file, &open_opts);
-       if (libbpf_get_error(obj)) {
+       if (!obj) {
                p_err("failed to open object file");
                goto err_close_obj;
        }
@@ -2199,7 +2199,7 @@ static char *profile_target_name(int tgt_fd)
        }
 
        btf = btf__load_from_kernel_by_id(info.btf_id);
-       if (libbpf_get_error(btf)) {
+       if (!btf) {
                p_err("failed to load btf for prog FD %d", tgt_fd);
                goto out;
        }
index ae9ad85f5cdac5386feefb4ac5d9f6ff73c70ff4..903b80ff4e9a46a406f73e0556e476656208e5e8 100644 (file)
@@ -32,7 +32,7 @@ static const struct btf *get_btf_vmlinux(void)
                return btf_vmlinux;
 
        btf_vmlinux = libbpf_find_kernel_btf();
-       if (libbpf_get_error(btf_vmlinux))
+       if (!btf_vmlinux)
                p_err("struct_ops requires kernel CONFIG_DEBUG_INFO_BTF=y");
 
        return btf_vmlinux;
@@ -45,7 +45,7 @@ static const char *get_kern_struct_ops_name(const struct bpf_map_info *info)
        const char *st_ops_name;
 
        kern_btf = get_btf_vmlinux();
-       if (libbpf_get_error(kern_btf))
+       if (!kern_btf)
                return "<btf_vmlinux_not_found>";
 
        t = btf__type_by_id(kern_btf, info->btf_vmlinux_value_type_id);
@@ -413,7 +413,7 @@ static int do_dump(int argc, char **argv)
        }
 
        kern_btf = get_btf_vmlinux();
-       if (libbpf_get_error(kern_btf))
+       if (!kern_btf)
                return -1;
 
        if (!json_output) {
@@ -496,7 +496,7 @@ static int do_register(int argc, char **argv)
                open_opts.kernel_log_level = 1 + 2 + 4;
 
        obj = bpf_object__open_file(file, &open_opts);
-       if (libbpf_get_error(obj))
+       if (!obj)
                return -1;
 
        set_max_rlimit();
@@ -590,8 +590,7 @@ int do_struct_ops(int argc, char **argv)
 
        err = cmd_select(cmds, argc, argv, do_help);
 
-       if (!libbpf_get_error(btf_vmlinux))
-               btf__free(btf_vmlinux);
+       btf__free(btf_vmlinux);
 
        return err;
 }