Re: [PATCH bpf] bpftool: Fix regression of "bpftool cgroup tree" EINVAL on older kernels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Apr 28, 2025 at 2:15 PM YiFei Zhu <zhuyifei@xxxxxxxxxx> wrote:
>
> If cgroup_has_attached_progs queries an attach type not supported
> by the running kernel, due to the kernel being older than the bpftool
> build, it would encounter an -EINVAL from BPF_PROG_QUERY syscall.
>
> Prior to commit 98b303c9bf05 ("bpftool: Query only cgroup-related
> attach types"), this EINVAL would be ignored by the function, allowing
> the function to only consider supported attach types. The commit
> changed so that, instead of querying all attach types, only attach
> types from the array `cgroup_attach_types` is queried. The assumption
> is that because these are only cgroup attach types, they should all
> be supported. Unfortunately this assumption may be false when the
> kernel is older than the bpftool build, where the attach types queried
> by bpftool is not yet implemented in the kernel. This would result in
> errors such as:
>
>   $ bpftool cgroup tree
>   CgroupPath
>   ID       AttachType      AttachFlags     Name
>   Error: can't query bpf programs attached to /sys/fs/cgroup: Invalid argument
>
> This patch restores the logic of ignoring EINVAL from prior to that patch.
>
> Fixes: 98b303c9bf05 ("bpftool: Query only cgroup-related attach types")
> Reported-by: Sagarika Sharma <sharmasagarika@xxxxxxxxxx>
> Reported-by: Minh-Anh Nguyen <minhanhdn@xxxxxxxxxx>
> Signed-off-by: YiFei Zhu <zhuyifei@xxxxxxxxxx>
> ---
>  tools/bpf/bpftool/cgroup.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/bpf/bpftool/cgroup.c b/tools/bpf/bpftool/cgroup.c
> index 93b139bfb9880..3f1d6be512151 100644
> --- a/tools/bpf/bpftool/cgroup.c
> +++ b/tools/bpf/bpftool/cgroup.c
> @@ -221,7 +221,7 @@ static int cgroup_has_attached_progs(int cgroup_fd)
>         for (i = 0; i < ARRAY_SIZE(cgroup_attach_types); i++) {
>                 int count = count_attached_bpf_progs(cgroup_fd, cgroup_attach_types[i]);
>
> -               if (count < 0)
> +               if (count < 0 && errno != EINVAL)
>                         return -1;

let's maybe change count_attached_bpf_progs() to return error directly
as returned by bpf_prog_query(), instead of translating that to -1 and
then requiring relying on errno?

so just

if (ret)
    return ret;

and then just

if (count < 0 && count != -EINVAL)
    return /* well whatever, I'd return error probably instead of -1 again */

Thoughts?


pw-bot: cr


>
>                 if (count > 0) {
> --
> 2.49.0.901.g37484f566f-goog
>





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux