lkml.org 
[lkml]   [2020]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 23/54] libbpf: Prevent overriding errno when logging errors
    Date
    From: Toke Høiland-Jørgensen <toke@redhat.com>

    [ Upstream commit 23ab656be263813acc3c20623757d3cd1496d9e1 ]

    Turns out there were a few more instances where libbpf didn't save the
    errno before writing an error message, causing errno to be overridden by
    the printf() return and the error disappearing if logging is enabled.

    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Andrii Nakryiko <andriin@fb.com>
    Link: https://lore.kernel.org/bpf/20200813142905.160381-1-toke@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/lib/bpf/libbpf.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
    index c417cff2cdaf4..3e53bfcba2b1a 100644
    --- a/tools/lib/bpf/libbpf.c
    +++ b/tools/lib/bpf/libbpf.c
    @@ -3210,10 +3210,11 @@ bpf_object__probe_global_data(struct bpf_object *obj)

    map = bpf_create_map_xattr(&map_attr);
    if (map < 0) {
    - cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
    + 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, errno);
    - return -errno;
    + __func__, cp, -ret);
    + return ret;
    }

    insns[0].imm = map;
    @@ -5508,9 +5509,10 @@ int bpf_program__pin_instance(struct bpf_program *prog, const char *path,
    }

    if (bpf_obj_pin(prog->instances.fds[instance], path)) {
    - cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
    + err = -errno;
    + cp = libbpf_strerror_r(err, errmsg, sizeof(errmsg));
    pr_warn("failed to pin program: %s\n", cp);
    - return -errno;
    + return err;
    }
    pr_debug("pinned program '%s'\n", path);

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-08-24 19:13    [W:4.162 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site