lkml.org 
[lkml]   [2020]   [Feb]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 186/399] bpf: Print error message for bpftool cgroup show
    Date
    From: Hechao Li <hechaol@fb.com>

    [ Upstream commit 1162f844030ac1ac7321b5e8f6c9badc7a11428f ]

    Currently, when bpftool cgroup show <path> has an error, no error
    message is printed. This is confusing because the user may think the
    result is empty.

    Before the change:

    $ bpftool cgroup show /sys/fs/cgroup
    ID AttachType AttachFlags Name
    $ echo $?
    255

    After the change:
    $ ./bpftool cgroup show /sys/fs/cgroup
    Error: can't query bpf programs attached to /sys/fs/cgroup: Operation
    not permitted

    v2: Rename check_query_cgroup_progs to cgroup_has_attached_progs

    Signed-off-by: Hechao Li <hechaol@fb.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20191224011742.3714301-1-hechaol@fb.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/bpf/bpftool/cgroup.c | 56 ++++++++++++++++++++++++++------------
    1 file changed, 39 insertions(+), 17 deletions(-)

    diff --git a/tools/bpf/bpftool/cgroup.c b/tools/bpf/bpftool/cgroup.c
    index 1ef45e55039e1..2f017caa678dc 100644
    --- a/tools/bpf/bpftool/cgroup.c
    +++ b/tools/bpf/bpftool/cgroup.c
    @@ -117,6 +117,25 @@ static int count_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type)
    return prog_cnt;
    }

    +static int cgroup_has_attached_progs(int cgroup_fd)
    +{
    + enum bpf_attach_type type;
    + bool no_prog = true;
    +
    + for (type = 0; type < __MAX_BPF_ATTACH_TYPE; type++) {
    + int count = count_attached_bpf_progs(cgroup_fd, type);
    +
    + if (count < 0 && errno != EINVAL)
    + return -1;
    +
    + if (count > 0) {
    + no_prog = false;
    + break;
    + }
    + }
    +
    + return no_prog ? 0 : 1;
    +}
    static int show_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type,
    int level)
    {
    @@ -161,6 +180,7 @@ static int show_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type,
    static int do_show(int argc, char **argv)
    {
    enum bpf_attach_type type;
    + int has_attached_progs;
    const char *path;
    int cgroup_fd;
    int ret = -1;
    @@ -192,6 +212,16 @@ static int do_show(int argc, char **argv)
    goto exit;
    }

    + has_attached_progs = cgroup_has_attached_progs(cgroup_fd);
    + if (has_attached_progs < 0) {
    + p_err("can't query bpf programs attached to %s: %s",
    + path, strerror(errno));
    + goto exit_cgroup;
    + } else if (!has_attached_progs) {
    + ret = 0;
    + goto exit_cgroup;
    + }
    +
    if (json_output)
    jsonw_start_array(json_wtr);
    else
    @@ -212,6 +242,7 @@ static int do_show(int argc, char **argv)
    if (json_output)
    jsonw_end_array(json_wtr);

    +exit_cgroup:
    close(cgroup_fd);
    exit:
    return ret;
    @@ -228,7 +259,7 @@ static int do_show_tree_fn(const char *fpath, const struct stat *sb,
    int typeflag, struct FTW *ftw)
    {
    enum bpf_attach_type type;
    - bool skip = true;
    + int has_attached_progs;
    int cgroup_fd;

    if (typeflag != FTW_D)
    @@ -240,22 +271,13 @@ static int do_show_tree_fn(const char *fpath, const struct stat *sb,
    return SHOW_TREE_FN_ERR;
    }

    - for (type = 0; type < __MAX_BPF_ATTACH_TYPE; type++) {
    - int count = count_attached_bpf_progs(cgroup_fd, type);
    -
    - if (count < 0 && errno != EINVAL) {
    - p_err("can't query bpf programs attached to %s: %s",
    - fpath, strerror(errno));
    - close(cgroup_fd);
    - return SHOW_TREE_FN_ERR;
    - }
    - if (count > 0) {
    - skip = false;
    - break;
    - }
    - }
    -
    - if (skip) {
    + has_attached_progs = cgroup_has_attached_progs(cgroup_fd);
    + if (has_attached_progs < 0) {
    + p_err("can't query bpf programs attached to %s: %s",
    + fpath, strerror(errno));
    + close(cgroup_fd);
    + return SHOW_TREE_FN_ERR;
    + } else if (!has_attached_progs) {
    close(cgroup_fd);
    return 0;
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-02-21 08:52    [W:4.279 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site