Skip to content

Commit 3ca2fb4

Browse files
i-Pearanakryiko
authored andcommitted
bpftool: Fix error message of strerror
strerror() expects a positive errno, however variable err will never be positive when an error occurs. This causes bpftool to output too many "unknown error", even a simple "file not exist" error can not get an accurate message. This patch fixed all "strerror(err)" patterns in bpftool. Specially in btf.c#L823, hashmap__append() is an internal function of libbpf and will not change errno, so there's a little difference. Some libbpf_get_error() calls are kept for return values. Changes since v1: https://lore.kernel.org/bpf/SY4P282MB1084B61CD8671DFA395AA8579D539@SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM/ Check directly for NULL values instead of calling libbpf_get_error(). Signed-off-by: Tianyi Liu <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Reviewed-by: Quentin Monnet <[email protected]> Link: https://lore.kernel.org/bpf/SY4P282MB1084AD9CD84A920F08DF83E29D549@SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM
1 parent 51e05a8 commit 3ca2fb4

File tree

3 files changed

+10
-12
lines changed

3 files changed

+10
-12
lines changed

tools/bpf/bpftool/btf.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -635,10 +635,9 @@ static int do_dump(int argc, char **argv)
635635

636636
btf = btf__parse_split(*argv, base ?: base_btf);
637637
err = libbpf_get_error(btf);
638-
if (err) {
639-
btf = NULL;
638+
if (!btf) {
640639
p_err("failed to load BTF from %s: %s",
641-
*argv, strerror(err));
640+
*argv, strerror(errno));
642641
goto done;
643642
}
644643
NEXT_ARG();
@@ -683,8 +682,8 @@ static int do_dump(int argc, char **argv)
683682

684683
btf = btf__load_from_kernel_by_id_split(btf_id, base_btf);
685684
err = libbpf_get_error(btf);
686-
if (err) {
687-
p_err("get btf by id (%u): %s", btf_id, strerror(err));
685+
if (!btf) {
686+
p_err("get btf by id (%u): %s", btf_id, strerror(errno));
688687
goto done;
689688
}
690689
}
@@ -820,7 +819,7 @@ build_btf_type_table(struct hashmap *tab, enum bpf_obj_type type,
820819
u32_as_hash_field(id));
821820
if (err) {
822821
p_err("failed to append entry to hashmap for BTF ID %u, object ID %u: %s",
823-
btf_id, id, strerror(errno));
822+
btf_id, id, strerror(-err));
824823
goto err_free;
825824
}
826825
}

tools/bpf/bpftool/gen.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,14 +1594,14 @@ static int do_object(int argc, char **argv)
15941594

15951595
err = bpf_linker__add_file(linker, file, NULL);
15961596
if (err) {
1597-
p_err("failed to link '%s': %s (%d)", file, strerror(err), err);
1597+
p_err("failed to link '%s': %s (%d)", file, strerror(errno), errno);
15981598
goto out;
15991599
}
16001600
}
16011601

16021602
err = bpf_linker__finalize(linker);
16031603
if (err) {
1604-
p_err("failed to finalize ELF file: %s (%d)", strerror(err), err);
1604+
p_err("failed to finalize ELF file: %s (%d)", strerror(errno), errno);
16051605
goto out;
16061606
}
16071607

tools/bpf/bpftool/map_perf_ring.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,9 @@ int do_event_pipe(int argc, char **argv)
188188
opts.map_keys = &ctx.idx;
189189
pb = perf_buffer__new_raw(map_fd, MMAP_PAGE_CNT, &perf_attr,
190190
print_bpf_output, &ctx, &opts);
191-
err = libbpf_get_error(pb);
192-
if (err) {
191+
if (!pb) {
193192
p_err("failed to create perf buffer: %s (%d)",
194-
strerror(err), err);
193+
strerror(errno), errno);
195194
goto err_close_map;
196195
}
197196

@@ -206,7 +205,7 @@ int do_event_pipe(int argc, char **argv)
206205
err = perf_buffer__poll(pb, 200);
207206
if (err < 0 && err != -EINTR) {
208207
p_err("perf buffer polling failed: %s (%d)",
209-
strerror(err), err);
208+
strerror(errno), errno);
210209
goto err_close_pb;
211210
}
212211
}

0 commit comments

Comments
 (0)