Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Sahid Orentino Ferdjaoui and committed by
Alexei Starovoitov
d1313e01 d2973ffd

+39 -45
+8 -11
tools/bpf/bpftool/btf.c
··· 467 467 int err = 0, i; 468 468 469 469 d = btf_dump__new(btf, btf_dump_printf, NULL, NULL); 470 - err = libbpf_get_error(d); 471 - if (err) 472 - return err; 470 + if (!d) 471 + return -errno; 473 472 474 473 printf("#ifndef __VMLINUX_H__\n"); 475 474 printf("#define __VMLINUX_H__\n"); ··· 511 512 struct btf *base; 512 513 513 514 base = btf__parse(sysfs_vmlinux, NULL); 514 - if (libbpf_get_error(base)) { 515 - p_err("failed to parse vmlinux BTF at '%s': %ld\n", 516 - sysfs_vmlinux, libbpf_get_error(base)); 517 - base = NULL; 518 - } 515 + if (!base) 516 + p_err("failed to parse vmlinux BTF at '%s': %d\n", 517 + sysfs_vmlinux, -errno); 519 518 520 519 return base; 521 520 } ··· 556 559 __u32 btf_id = -1; 557 560 const char *src; 558 561 int fd = -1; 559 - int err; 562 + int err = 0; 560 563 561 564 if (!REQ_ARGS(2)) { 562 565 usage(); ··· 631 634 base = get_vmlinux_btf_from_sysfs(); 632 635 633 636 btf = btf__parse_split(*argv, base ?: base_btf); 634 - err = libbpf_get_error(btf); 635 637 if (!btf) { 638 + err = -errno; 636 639 p_err("failed to load BTF from %s: %s", 637 640 *argv, strerror(errno)); 638 641 goto done; ··· 678 681 } 679 682 680 683 btf = btf__load_from_kernel_by_id_split(btf_id, base_btf); 681 - err = libbpf_get_error(btf); 682 684 if (!btf) { 685 + err = -errno; 683 686 p_err("get btf by id (%u): %s", btf_id, strerror(errno)); 684 687 goto done; 685 688 }
+1 -1
tools/bpf/bpftool/btf_dumper.c
··· 75 75 goto print; 76 76 77 77 prog_btf = btf__load_from_kernel_by_id(info.btf_id); 78 - if (libbpf_get_error(prog_btf)) 78 + if (!prog_btf) 79 79 goto print; 80 80 func_type = btf__type_by_id(prog_btf, finfo.type_id); 81 81 if (!func_type || !btf_is_func(func_type))
+4 -6
tools/bpf/bpftool/gen.c
··· 252 252 int err = 0; 253 253 254 254 d = btf_dump__new(btf, codegen_btf_dump_printf, NULL, NULL); 255 - err = libbpf_get_error(d); 256 - if (err) 257 - return err; 255 + if (!d) 256 + return -errno; 258 257 259 258 bpf_object__for_each_map(map, obj) { 260 259 /* only generate definitions for memory-mapped internal maps */ ··· 975 976 /* log_level1 + log_level2 + stats, but not stable UAPI */ 976 977 opts.kernel_log_level = 1 + 2 + 4; 977 978 obj = bpf_object__open_mem(obj_data, file_sz, &opts); 978 - err = libbpf_get_error(obj); 979 - if (err) { 979 + if (!obj) { 980 980 char err_buf[256]; 981 981 982 + err = -errno; 982 983 libbpf_strerror(err, err_buf, sizeof(err_buf)); 983 984 p_err("failed to open BPF object file: %s", err_buf); 984 - obj = NULL; 985 985 goto out; 986 986 } 987 987
+6 -4
tools/bpf/bpftool/iter.c
··· 4 4 #ifndef _GNU_SOURCE 5 5 #define _GNU_SOURCE 6 6 #endif 7 + #include <errno.h> 7 8 #include <unistd.h> 8 9 #include <linux/err.h> 9 10 #include <bpf/libbpf.h> ··· 49 48 } 50 49 51 50 obj = bpf_object__open(objfile); 52 - err = libbpf_get_error(obj); 53 - if (err) { 51 + if (!obj) { 52 + err = -errno; 54 53 p_err("can't open objfile %s", objfile); 55 54 goto close_map_fd; 56 55 } ··· 63 62 64 63 prog = bpf_object__next_program(obj, NULL); 65 64 if (!prog) { 65 + err = -errno; 66 66 p_err("can't find bpf program in objfile %s", objfile); 67 67 goto close_obj; 68 68 } 69 69 70 70 link = bpf_program__attach_iter(prog, &iter_opts); 71 - err = libbpf_get_error(link); 72 - if (err) { 71 + if (!link) { 72 + err = -errno; 73 73 p_err("attach_iter failed for program %s", 74 74 bpf_program__name(prog)); 75 75 goto close_obj;
+3 -4
tools/bpf/bpftool/main.c
··· 510 510 break; 511 511 case 'B': 512 512 base_btf = btf__parse(optarg, NULL); 513 - if (libbpf_get_error(base_btf)) { 514 - p_err("failed to parse base BTF at '%s': %ld\n", 515 - optarg, libbpf_get_error(base_btf)); 516 - base_btf = NULL; 513 + if (!base_btf) { 514 + p_err("failed to parse base BTF at '%s': %d\n", 515 + optarg, -errno); 517 516 return -1; 518 517 } 519 518 break;
+7 -8
tools/bpf/bpftool/map.c
··· 786 786 if (info->btf_vmlinux_value_type_id) { 787 787 if (!btf_vmlinux) { 788 788 btf_vmlinux = libbpf_find_kernel_btf(); 789 - err = libbpf_get_error(btf_vmlinux); 790 - if (err) { 789 + if (!btf_vmlinux) { 791 790 p_err("failed to get kernel btf"); 792 - return err; 791 + return -errno; 793 792 } 794 793 } 795 794 *btf = btf_vmlinux; 796 795 } else if (info->btf_value_type_id) { 797 796 *btf = btf__load_from_kernel_by_id(info->btf_id); 798 - err = libbpf_get_error(*btf); 799 - if (err) 797 + if (!*btf) { 798 + err = -errno; 800 799 p_err("failed to get btf"); 800 + } 801 801 } else { 802 802 *btf = NULL; 803 803 } ··· 807 807 808 808 static void free_map_kv_btf(struct btf *btf) 809 809 { 810 - if (!libbpf_get_error(btf) && btf != btf_vmlinux) 810 + if (btf != btf_vmlinux) 811 811 btf__free(btf); 812 812 } 813 813 814 814 static void free_btf_vmlinux(void) 815 815 { 816 - if (!libbpf_get_error(btf_vmlinux)) 817 - btf__free(btf_vmlinux); 816 + btf__free(btf_vmlinux); 818 817 } 819 818 820 819 static int
+5 -5
tools/bpf/bpftool/prog.c
··· 322 322 return; 323 323 324 324 btf = btf__load_from_kernel_by_id(map_info.btf_id); 325 - if (libbpf_get_error(btf)) 325 + if (!btf) 326 326 goto out_free; 327 327 328 328 t_datasec = btf__type_by_id(btf, map_info.btf_value_type_id); ··· 726 726 727 727 if (info->btf_id) { 728 728 btf = btf__load_from_kernel_by_id(info->btf_id); 729 - if (libbpf_get_error(btf)) { 729 + if (!btf) { 730 730 p_err("failed to get btf"); 731 731 return -1; 732 732 } ··· 1663 1663 open_opts.kernel_log_level = 1 + 2 + 4; 1664 1664 1665 1665 obj = bpf_object__open_file(file, &open_opts); 1666 - if (libbpf_get_error(obj)) { 1666 + if (!obj) { 1667 1667 p_err("failed to open object file"); 1668 1668 goto err_free_reuse_maps; 1669 1669 } ··· 1882 1882 open_opts.kernel_log_level = 1 + 2 + 4; 1883 1883 1884 1884 obj = bpf_object__open_file(file, &open_opts); 1885 - if (libbpf_get_error(obj)) { 1885 + if (!obj) { 1886 1886 p_err("failed to open object file"); 1887 1887 goto err_close_obj; 1888 1888 } ··· 2199 2199 } 2200 2200 2201 2201 btf = btf__load_from_kernel_by_id(info.btf_id); 2202 - if (libbpf_get_error(btf)) { 2202 + if (!btf) { 2203 2203 p_err("failed to load btf for prog FD %d", tgt_fd); 2204 2204 goto out; 2205 2205 }
+5 -6
tools/bpf/bpftool/struct_ops.c
··· 32 32 return btf_vmlinux; 33 33 34 34 btf_vmlinux = libbpf_find_kernel_btf(); 35 - if (libbpf_get_error(btf_vmlinux)) 35 + if (!btf_vmlinux) 36 36 p_err("struct_ops requires kernel CONFIG_DEBUG_INFO_BTF=y"); 37 37 38 38 return btf_vmlinux; ··· 45 45 const char *st_ops_name; 46 46 47 47 kern_btf = get_btf_vmlinux(); 48 - if (libbpf_get_error(kern_btf)) 48 + if (!kern_btf) 49 49 return "<btf_vmlinux_not_found>"; 50 50 51 51 t = btf__type_by_id(kern_btf, info->btf_vmlinux_value_type_id); ··· 413 413 } 414 414 415 415 kern_btf = get_btf_vmlinux(); 416 - if (libbpf_get_error(kern_btf)) 416 + if (!kern_btf) 417 417 return -1; 418 418 419 419 if (!json_output) { ··· 496 496 open_opts.kernel_log_level = 1 + 2 + 4; 497 497 498 498 obj = bpf_object__open_file(file, &open_opts); 499 - if (libbpf_get_error(obj)) 499 + if (!obj) 500 500 return -1; 501 501 502 502 set_max_rlimit(); ··· 590 590 591 591 err = cmd_select(cmds, argc, argv, do_help); 592 592 593 - if (!libbpf_get_error(btf_vmlinux)) 594 - btf__free(btf_vmlinux); 593 + btf__free(btf_vmlinux); 595 594 596 595 return err; 597 596 }