mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
bpftool: clean-up usage of libbpf_get_error()
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>
This commit is contained in:
parent
d2973ffd25
commit
d1313e0127
@ -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;
|
||||
}
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user