All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kenta Tada <tadakentaso@gmail.com>
To: Quentin Monnet <qmo@kernel.org>, bpf@vger.kernel.org
Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev,
	eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev,
	john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
	haoluo@google.com, jolsa@kernel.org
Subject: Re: [PATCH v2] bpftool: Query only cgroup-related attach types
Date: Fri, 7 Jun 2024 19:57:05 +0900	[thread overview]
Message-ID: <aa7994d8-b0ba-4404-b89e-44044c333518@gmail.com> (raw)
In-Reply-To: <e7ca0725-9cf7-49e3-b362-93430e3c649f@kernel.org>

On 2024/06/07 19:50, Quentin Monnet wrote:
> 2024-06-07 11:21 UTC+0100 ~ Kenta Tada <tadakentaso@gmail.com>
>> When CONFIG_NETKIT=y,
>> bpftool-cgroup shows error even if the cgroup's path is correct:
>>
>> $ bpftool cgroup tree /sys/fs/cgroup
>> CgroupPath
>> ID       AttachType      AttachFlags     Name
>> Error: can't query bpf programs attached to /sys/fs/cgroup: No such device or address
>>
>> From strace and kernel tracing, I found netkit returned ENXIO and this command failed.
>> I think this AttachType(BPF_NETKIT_PRIMARY) is not relevant to cgroup.
>>
>> bpftool-cgroup should query just only cgroup-related attach types.
>>
>> v1->v2:
>>   - used an array of cgroup attach types
>>
>> Signed-off-by: Kenta Tada <tadakentaso@gmail.com>
>> ---
>>  tools/bpf/bpftool/cgroup.c | 38 +++++++++++++++++++++++++++++++++++---
>>  1 file changed, 35 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/bpf/bpftool/cgroup.c b/tools/bpf/bpftool/cgroup.c
>> index af6898c0f388..afab728468bf 100644
>> --- a/tools/bpf/bpftool/cgroup.c
>> +++ b/tools/bpf/bpftool/cgroup.c
>> @@ -19,6 +19,38 @@
>>  
>>  #include "main.h"
>>  
>> +static const int cgroup_attach_types[] = {
>> +	BPF_CGROUP_INET_INGRESS,
>> +	BPF_CGROUP_INET_EGRESS,
>> +	BPF_CGROUP_INET_SOCK_CREATE,
>> +	BPF_CGROUP_INET_SOCK_RELEASE,
>> +	BPF_CGROUP_INET4_BIND,
>> +	BPF_CGROUP_INET6_BIND,
>> +	BPF_CGROUP_INET4_POST_BIND,
>> +	BPF_CGROUP_INET6_POST_BIND,
>> +	BPF_CGROUP_INET4_CONNECT,
>> +	BPF_CGROUP_INET6_CONNECT,
>> +	BPF_CGROUP_UNIX_CONNECT,
>> +	BPF_CGROUP_INET4_GETPEERNAME,
>> +	BPF_CGROUP_INET6_GETPEERNAME,
>> +	BPF_CGROUP_UNIX_GETPEERNAME,
>> +	BPF_CGROUP_INET4_GETSOCKNAME,
>> +	BPF_CGROUP_INET6_GETSOCKNAME,
>> +	BPF_CGROUP_UNIX_GETSOCKNAME,
>> +	BPF_CGROUP_UDP4_SENDMSG,
>> +	BPF_CGROUP_UDP6_SENDMSG,
>> +	BPF_CGROUP_UNIX_SENDMSG,
>> +	BPF_CGROUP_UDP4_RECVMSG,
>> +	BPF_CGROUP_UDP6_RECVMSG,
>> +	BPF_CGROUP_UNIX_RECVMSG,
>> +	BPF_CGROUP_SOCK_OPS,
>> +	BPF_CGROUP_DEVICE,
>> +	BPF_CGROUP_SYSCTL,
>> +	BPF_CGROUP_GETSOCKOPT,
>> +	BPF_CGROUP_SETSOCKOPT,
>> +	BPF_LSM_CGROUP
>> +};
>> +
>>  #define HELP_SPEC_ATTACH_FLAGS						\
>>  	"ATTACH_FLAGS := { multi | override }"
>>  
>> @@ -183,11 +215,11 @@ static int count_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type)
>>  
>>  static int cgroup_has_attached_progs(int cgroup_fd)
>>  {
>> -	enum bpf_attach_type type;
>> +	unsigned int i = 0;
>>  	bool no_prog = true;
>>  
>> -	for (type = 0; type < __MAX_BPF_ATTACH_TYPE; type++) {
>> -		int count = count_attached_bpf_progs(cgroup_fd, type);
>> +	for (i = 0; i < ARRAY_SIZE(cgroup_attach_types); i++) {
> 
> 
> Thanks, it looks better that way.
> 
> 
>> +		int count = count_attached_bpf_progs(cgroup_fd, cgroup_attach_types[i]);
>>  
>>  		if (count < 0 && errno != EINVAL)
> 
> 
> I think the "errno != EINVAL" exception was here to allow iterating over
> unsupported attach types for the queries. Now that we only do supported
> types, we can probably remove it and return if "(count < 0)".

OK.
I'll fix it quickly.
Thanks!

> 
> 
>>  			return -1;
> 


      reply	other threads:[~2024-06-07 10:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-07 10:21 [PATCH v2] bpftool: Query only cgroup-related attach types Kenta Tada
2024-06-07 10:50 ` Quentin Monnet
2024-06-07 10:57   ` Kenta Tada [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aa7994d8-b0ba-4404-b89e-44044c333518@gmail.com \
    --to=tadakentaso@gmail.com \
    --cc=andrii@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=qmo@kernel.org \
    --cc=sdf@google.com \
    --cc=song@kernel.org \
    --cc=yonghong.song@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.