]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
libbpf: Stringify errno in log messages in the remaining code
authorMykyta Yatsenko <yatsenko@meta.com>
Mon, 11 Nov 2024 21:29:19 +0000 (21:29 +0000)
committerAndrii Nakryiko <andrii@kernel.org>
Tue, 12 Nov 2024 04:29:45 +0000 (20:29 -0800)
Convert numeric error codes into the string representations in log
messages in the rest of libbpf source files.

Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20241111212919.368971-5-mykyta.yatsenko5@gmail.com
tools/lib/bpf/elf.c
tools/lib/bpf/features.c
tools/lib/bpf/gen_loader.c
tools/lib/bpf/linker.c
tools/lib/bpf/ringbuf.c
tools/lib/bpf/usdt.c

index b5ab1cb13e5ea0dfabd92631d3c8adf52d133d19..823f83ad819c8e3eebc45778463b5c7ea65c4cc8 100644 (file)
@@ -24,7 +24,6 @@
 
 int elf_open(const char *binary_path, struct elf_fd *elf_fd)
 {
-       char errmsg[STRERR_BUFSIZE];
        int fd, ret;
        Elf *elf;
 
@@ -38,8 +37,7 @@ int elf_open(const char *binary_path, struct elf_fd *elf_fd)
        fd = open(binary_path, O_RDONLY | O_CLOEXEC);
        if (fd < 0) {
                ret = -errno;
-               pr_warn("elf: failed to open %s: %s\n", binary_path,
-                       libbpf_strerror_r(ret, errmsg, sizeof(errmsg)));
+               pr_warn("elf: failed to open %s: %s\n", binary_path, errstr(ret));
                return ret;
        }
        elf = elf_begin(fd, ELF_C_READ_MMAP, NULL);
index 50befe125ddc550997fc0c8452c05c8e6f955579..760657f5224c2a624710bb650e04e20d74a6a78b 100644 (file)
@@ -47,7 +47,6 @@ static int probe_kern_prog_name(int token_fd)
 
 static int probe_kern_global_data(int token_fd)
 {
-       char *cp, errmsg[STRERR_BUFSIZE];
        struct bpf_insn insns[] = {
                BPF_LD_MAP_VALUE(BPF_REG_1, 0, 16),
                BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 42),
@@ -67,9 +66,8 @@ static int probe_kern_global_data(int token_fd)
        map = bpf_map_create(BPF_MAP_TYPE_ARRAY, "libbpf_global", sizeof(int), 32, 1, &map_opts);
        if (map < 0) {
                ret = -errno;
-               cp = libbpf_strerror_r(ret, errmsg, sizeof(errmsg));
-               pr_warn("Error in %s():%s(%d). Couldn't create simple array map.\n",
-                       __func__, cp, -ret);
+               pr_warn("Error in %s(): %s. Couldn't create simple array map.\n",
+                       __func__, errstr(ret));
                return ret;
        }
 
@@ -267,7 +265,6 @@ static int probe_kern_probe_read_kernel(int token_fd)
 
 static int probe_prog_bind_map(int token_fd)
 {
-       char *cp, errmsg[STRERR_BUFSIZE];
        struct bpf_insn insns[] = {
                BPF_MOV64_IMM(BPF_REG_0, 0),
                BPF_EXIT_INSN(),
@@ -285,9 +282,8 @@ static int probe_prog_bind_map(int token_fd)
        map = bpf_map_create(BPF_MAP_TYPE_ARRAY, "libbpf_det_bind", sizeof(int), 32, 1, &map_opts);
        if (map < 0) {
                ret = -errno;
-               cp = libbpf_strerror_r(ret, errmsg, sizeof(errmsg));
-               pr_warn("Error in %s():%s(%d). Couldn't create simple array map.\n",
-                       __func__, cp, -ret);
+               pr_warn("Error in %s(): %s. Couldn't create simple array map.\n",
+                       __func__, errstr(ret));
                return ret;
        }
 
@@ -604,7 +600,8 @@ bool feat_supported(struct kern_feature_cache *cache, enum kern_feature_id feat_
                } else if (ret == 0) {
                        WRITE_ONCE(cache->res[feat_id], FEAT_MISSING);
                } else {
-                       pr_warn("Detection of kernel %s support failed: %d\n", feat->desc, ret);
+                       pr_warn("Detection of kernel %s support failed: %s\n",
+                               feat->desc, errstr(ret));
                        WRITE_ONCE(cache->res[feat_id], FEAT_MISSING);
                }
        }
index 8a2b0f62d91daf3bb3f63a5b48dfcbafc32b1dc5..113ae4abd345f24d3f7ceb0c29ce57c0da7d6456 100644 (file)
@@ -14,6 +14,7 @@
 #include "bpf_gen_internal.h"
 #include "skel_internal.h"
 #include <asm/byteorder.h>
+#include "str_error.h"
 
 #define MAX_USED_MAPS  64
 #define MAX_USED_PROGS 32
@@ -393,7 +394,7 @@ int bpf_gen__finish(struct bpf_gen *gen, int nr_progs, int nr_maps)
                              blob_fd_array_off(gen, i));
        emit(gen, BPF_MOV64_IMM(BPF_REG_0, 0));
        emit(gen, BPF_EXIT_INSN());
-       pr_debug("gen: finish %d\n", gen->error);
+       pr_debug("gen: finish %s\n", errstr(gen->error));
        if (!gen->error) {
                struct gen_loader_opts *opts = gen->opts;
 
index f83c1c29982c3d9d7f6775cd98a6f3387a4e9c50..cf71d149fe26a216ab96a9f8a97e5bb6ec8cd2ea 100644 (file)
@@ -20,6 +20,7 @@
 #include "btf.h"
 #include "libbpf_internal.h"
 #include "strset.h"
+#include "str_error.h"
 
 #define BTF_EXTERN_SEC ".extern"
 
@@ -306,7 +307,7 @@ static int init_output_elf(struct bpf_linker *linker, const char *file)
        linker->fd = open(file, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644);
        if (linker->fd < 0) {
                err = -errno;
-               pr_warn("failed to create '%s': %d\n", file, err);
+               pr_warn("failed to create '%s': %s\n", file, errstr(err));
                return err;
        }
 
@@ -560,7 +561,7 @@ static int linker_load_obj_file(struct bpf_linker *linker, const char *filename,
        obj->fd = open(filename, O_RDONLY | O_CLOEXEC);
        if (obj->fd < 0) {
                err = -errno;
-               pr_warn("failed to open file '%s': %d\n", filename, err);
+               pr_warn("failed to open file '%s': %s\n", filename, errstr(err));
                return err;
        }
        obj->elf = elf_begin(obj->fd, ELF_C_READ_MMAP, NULL);
@@ -670,7 +671,8 @@ static int linker_load_obj_file(struct bpf_linker *linker, const char *filename,
                                obj->btf = btf__new(data->d_buf, shdr->sh_size);
                                err = libbpf_get_error(obj->btf);
                                if (err) {
-                                       pr_warn("failed to parse .BTF from %s: %d\n", filename, err);
+                                       pr_warn("failed to parse .BTF from %s: %s\n",
+                                               filename, errstr(err));
                                        return err;
                                }
                                sec->skipped = true;
@@ -680,7 +682,8 @@ static int linker_load_obj_file(struct bpf_linker *linker, const char *filename,
                                obj->btf_ext = btf_ext__new(data->d_buf, shdr->sh_size);
                                err = libbpf_get_error(obj->btf_ext);
                                if (err) {
-                                       pr_warn("failed to parse .BTF.ext from '%s': %d\n", filename, err);
+                                       pr_warn("failed to parse .BTF.ext from '%s': %s\n",
+                                               filename, errstr(err));
                                        return err;
                                }
                                sec->skipped = true;
@@ -2774,14 +2777,14 @@ static int finalize_btf(struct bpf_linker *linker)
 
        err = finalize_btf_ext(linker);
        if (err) {
-               pr_warn(".BTF.ext generation failed: %d\n", err);
+               pr_warn(".BTF.ext generation failed: %s\n", errstr(err));
                return err;
        }
 
        opts.btf_ext = linker->btf_ext;
        err = btf__dedup(linker->btf, &opts);
        if (err) {
-               pr_warn("BTF dedup failed: %d\n", err);
+               pr_warn("BTF dedup failed: %s\n", errstr(err));
                return err;
        }
 
@@ -2799,7 +2802,7 @@ static int finalize_btf(struct bpf_linker *linker)
 
        err = emit_elf_data_sec(linker, BTF_ELF_SEC, 8, raw_data, raw_sz);
        if (err) {
-               pr_warn("failed to write out .BTF ELF section: %d\n", err);
+               pr_warn("failed to write out .BTF ELF section: %s\n", errstr(err));
                return err;
        }
 
@@ -2811,7 +2814,7 @@ static int finalize_btf(struct bpf_linker *linker)
 
                err = emit_elf_data_sec(linker, BTF_EXT_ELF_SEC, 8, raw_data, raw_sz);
                if (err) {
-                       pr_warn("failed to write out .BTF.ext ELF section: %d\n", err);
+                       pr_warn("failed to write out .BTF.ext ELF section: %s\n", errstr(err));
                        return err;
                }
        }
@@ -2987,7 +2990,7 @@ static int finalize_btf_ext(struct bpf_linker *linker)
        err = libbpf_get_error(linker->btf_ext);
        if (err) {
                linker->btf_ext = NULL;
-               pr_warn("failed to parse final .BTF.ext data: %d\n", err);
+               pr_warn("failed to parse final .BTF.ext data: %s\n", errstr(err));
                goto out;
        }
 
index bfd8dac4c0cc0c9ab235a121c7ddb55bc8875d3a..9702b70da444c5a8e94d223ebe434d81d44f6801 100644 (file)
@@ -21,6 +21,7 @@
 #include "libbpf.h"
 #include "libbpf_internal.h"
 #include "bpf.h"
+#include "str_error.h"
 
 struct ring {
        ring_buffer_sample_fn sample_cb;
@@ -88,8 +89,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
        err = bpf_map_get_info_by_fd(map_fd, &info, &len);
        if (err) {
                err = -errno;
-               pr_warn("ringbuf: failed to get map info for fd=%d: %d\n",
-                       map_fd, err);
+               pr_warn("ringbuf: failed to get map info for fd=%d: %s\n",
+                       map_fd, errstr(err));
                return libbpf_err(err);
        }
 
@@ -123,8 +124,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
        tmp = mmap(NULL, rb->page_size, PROT_READ | PROT_WRITE, MAP_SHARED, map_fd, 0);
        if (tmp == MAP_FAILED) {
                err = -errno;
-               pr_warn("ringbuf: failed to mmap consumer page for map fd=%d: %d\n",
-                       map_fd, err);
+               pr_warn("ringbuf: failed to mmap consumer page for map fd=%d: %s\n",
+                       map_fd, errstr(err));
                goto err_out;
        }
        r->consumer_pos = tmp;
@@ -142,8 +143,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
        tmp = mmap(NULL, (size_t)mmap_sz, PROT_READ, MAP_SHARED, map_fd, rb->page_size);
        if (tmp == MAP_FAILED) {
                err = -errno;
-               pr_warn("ringbuf: failed to mmap data pages for map fd=%d: %d\n",
-                       map_fd, err);
+               pr_warn("ringbuf: failed to mmap data pages for map fd=%d: %s\n",
+                       map_fd, errstr(err));
                goto err_out;
        }
        r->producer_pos = tmp;
@@ -156,8 +157,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
        e->data.fd = rb->ring_cnt;
        if (epoll_ctl(rb->epoll_fd, EPOLL_CTL_ADD, map_fd, e) < 0) {
                err = -errno;
-               pr_warn("ringbuf: failed to epoll add map fd=%d: %d\n",
-                       map_fd, err);
+               pr_warn("ringbuf: failed to epoll add map fd=%d: %s\n",
+                       map_fd, errstr(err));
                goto err_out;
        }
 
@@ -205,7 +206,7 @@ ring_buffer__new(int map_fd, ring_buffer_sample_fn sample_cb, void *ctx,
        rb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
        if (rb->epoll_fd < 0) {
                err = -errno;
-               pr_warn("ringbuf: failed to create epoll instance: %d\n", err);
+               pr_warn("ringbuf: failed to create epoll instance: %s\n", errstr(err));
                goto err_out;
        }
 
@@ -458,7 +459,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
        err = bpf_map_get_info_by_fd(map_fd, &info, &len);
        if (err) {
                err = -errno;
-               pr_warn("user ringbuf: failed to get map info for fd=%d: %d\n", map_fd, err);
+               pr_warn("user ringbuf: failed to get map info for fd=%d: %s\n",
+                       map_fd, errstr(err));
                return err;
        }
 
@@ -474,8 +476,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
        tmp = mmap(NULL, rb->page_size, PROT_READ, MAP_SHARED, map_fd, 0);
        if (tmp == MAP_FAILED) {
                err = -errno;
-               pr_warn("user ringbuf: failed to mmap consumer page for map fd=%d: %d\n",
-                       map_fd, err);
+               pr_warn("user ringbuf: failed to mmap consumer page for map fd=%d: %s\n",
+                       map_fd, errstr(err));
                return err;
        }
        rb->consumer_pos = tmp;
@@ -494,8 +496,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
                   map_fd, rb->page_size);
        if (tmp == MAP_FAILED) {
                err = -errno;
-               pr_warn("user ringbuf: failed to mmap data pages for map fd=%d: %d\n",
-                       map_fd, err);
+               pr_warn("user ringbuf: failed to mmap data pages for map fd=%d: %s\n",
+                       map_fd, errstr(err));
                return err;
        }
 
@@ -506,7 +508,7 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
        rb_epoll->events = EPOLLOUT;
        if (epoll_ctl(rb->epoll_fd, EPOLL_CTL_ADD, map_fd, rb_epoll) < 0) {
                err = -errno;
-               pr_warn("user ringbuf: failed to epoll add map fd=%d: %d\n", map_fd, err);
+               pr_warn("user ringbuf: failed to epoll add map fd=%d: %s\n", map_fd, errstr(err));
                return err;
        }
 
@@ -531,7 +533,7 @@ user_ring_buffer__new(int map_fd, const struct user_ring_buffer_opts *opts)
        rb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
        if (rb->epoll_fd < 0) {
                err = -errno;
-               pr_warn("user ringbuf: failed to create epoll instance: %d\n", err);
+               pr_warn("user ringbuf: failed to create epoll instance: %s\n", errstr(err));
                goto err_out;
        }
 
index 93794f01bb67cb41194ff2df59d5f7f3709cfa39..5f085736c6c45d11e5962535d8ceed1ca24eb599 100644 (file)
@@ -20,6 +20,7 @@
 #include "libbpf_common.h"
 #include "libbpf_internal.h"
 #include "hashmap.h"
+#include "str_error.h"
 
 /* libbpf's USDT support consists of BPF-side state/code and user-space
  * state/code working together in concert. BPF-side parts are defined in
@@ -465,8 +466,8 @@ static int parse_vma_segs(int pid, const char *lib_path, struct elf_seg **segs,
                goto proceed;
 
        if (!realpath(lib_path, path)) {
-               pr_warn("usdt: failed to get absolute path of '%s' (err %d), using path as is...\n",
-                       lib_path, -errno);
+               pr_warn("usdt: failed to get absolute path of '%s' (err %s), using path as is...\n",
+                       lib_path, errstr(-errno));
                libbpf_strlcpy(path, lib_path, sizeof(path));
        }
 
@@ -475,8 +476,8 @@ proceed:
        f = fopen(line, "re");
        if (!f) {
                err = -errno;
-               pr_warn("usdt: failed to open '%s' to get base addr of '%s': %d\n",
-                       line, lib_path, err);
+               pr_warn("usdt: failed to open '%s' to get base addr of '%s': %s\n",
+                       line, lib_path, errstr(err));
                return err;
        }
 
@@ -606,7 +607,8 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char *
 
        err = parse_elf_segs(elf, path, &segs, &seg_cnt);
        if (err) {
-               pr_warn("usdt: failed to process ELF program segments for '%s': %d\n", path, err);
+               pr_warn("usdt: failed to process ELF program segments for '%s': %s\n",
+                       path, errstr(err));
                goto err_out;
        }
 
@@ -708,8 +710,8 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char *
                        if (vma_seg_cnt == 0) {
                                err = parse_vma_segs(pid, path, &vma_segs, &vma_seg_cnt);
                                if (err) {
-                                       pr_warn("usdt: failed to get memory segments in PID %d for shared library '%s': %d\n",
-                                               pid, path, err);
+                                       pr_warn("usdt: failed to get memory segments in PID %d for shared library '%s': %s\n",
+                                               pid, path, errstr(err));
                                        goto err_out;
                                }
                        }
@@ -1047,8 +1049,8 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
 
                if (is_new && bpf_map_update_elem(spec_map_fd, &spec_id, &target->spec, BPF_ANY)) {
                        err = -errno;
-                       pr_warn("usdt: failed to set USDT spec #%d for '%s:%s' in '%s': %d\n",
-                               spec_id, usdt_provider, usdt_name, path, err);
+                       pr_warn("usdt: failed to set USDT spec #%d for '%s:%s' in '%s': %s\n",
+                               spec_id, usdt_provider, usdt_name, path, errstr(err));
                        goto err_out;
                }
                if (!man->has_bpf_cookie &&
@@ -1058,9 +1060,9 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
                                pr_warn("usdt: IP collision detected for spec #%d for '%s:%s' in '%s'\n",
                                        spec_id, usdt_provider, usdt_name, path);
                        } else {
-                               pr_warn("usdt: failed to map IP 0x%lx to spec #%d for '%s:%s' in '%s': %d\n",
+                               pr_warn("usdt: failed to map IP 0x%lx to spec #%d for '%s:%s' in '%s': %s\n",
                                        target->abs_ip, spec_id, usdt_provider, usdt_name,
-                                       path, err);
+                                       path, errstr(err));
                        }
                        goto err_out;
                }
@@ -1076,8 +1078,8 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
                                                                      target->rel_ip, &opts);
                        err = libbpf_get_error(uprobe_link);
                        if (err) {
-                               pr_warn("usdt: failed to attach uprobe #%d for '%s:%s' in '%s': %d\n",
-                                       i, usdt_provider, usdt_name, path, err);
+                               pr_warn("usdt: failed to attach uprobe #%d for '%s:%s' in '%s': %s\n",
+                                       i, usdt_provider, usdt_name, path, errstr(err));
                                goto err_out;
                        }
 
@@ -1099,8 +1101,8 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
                                                                    NULL, &opts_multi);
                if (!link->multi_link) {
                        err = -errno;
-                       pr_warn("usdt: failed to attach uprobe multi for '%s:%s' in '%s': %d\n",
-                               usdt_provider, usdt_name, path, err);
+                       pr_warn("usdt: failed to attach uprobe multi for '%s:%s' in '%s': %s\n",
+                               usdt_provider, usdt_name, path, errstr(err));
                        goto err_out;
                }