bpftool: Add support for cgroup unix socket address hooks
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 11 Oct 2023 18:51:08 +0000 (20:51 +0200)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 12 Oct 2023 00:27:55 +0000 (17:27 -0700)
Add the necessary plumbing to hook up the new cgroup unix sockaddr
hooks into bpftool.

Signed-off-by: Daan De Meyer <daan.j.demeyer@gmail.com>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/r/20231011185113.140426-7-daan.j.demeyer@gmail.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
tools/bpf/bpftool/Documentation/bpftool-cgroup.rst
tools/bpf/bpftool/Documentation/bpftool-prog.rst
tools/bpf/bpftool/bash-completion/bpftool
tools/bpf/bpftool/cgroup.c
tools/bpf/bpftool/prog.c

index bd015ec9847b4c1dab35ce1f7fe49b3fcdd948c8..2ce900f66d6ec0502ef35bed68801dc71d378f8e 100644 (file)
@@ -36,11 +36,14 @@ CGROUP COMMANDS
 |              **cgroup_device** | **cgroup_inet4_bind** | **cgroup_inet6_bind** |
 |              **cgroup_inet4_post_bind** | **cgroup_inet6_post_bind** |
 |              **cgroup_inet4_connect** | **cgroup_inet6_connect** |
-|              **cgroup_inet4_getpeername** | **cgroup_inet6_getpeername** |
+|              **cgroup_unix_connect** | **cgroup_inet4_getpeername** |
+|              **cgroup_inet6_getpeername** | **cgroup_unix_getpeername** |
 |              **cgroup_inet4_getsockname** | **cgroup_inet6_getsockname** |
-|              **cgroup_udp4_sendmsg** | **cgroup_udp6_sendmsg** |
+|              **cgroup_unix_getsockname** | **cgroup_udp4_sendmsg** |
+|              **cgroup_udp6_sendmsg** | **cgroup_unix_sendmsg** |
 |              **cgroup_udp4_recvmsg** | **cgroup_udp6_recvmsg** |
-|              **cgroup_sysctl** | **cgroup_getsockopt** | **cgroup_setsockopt** |
+|              **cgroup_unix_recvmsg** | **cgroup_sysctl** |
+|              **cgroup_getsockopt** | **cgroup_setsockopt** |
 |              **cgroup_inet_sock_release** }
 |      *ATTACH_FLAGS* := { **multi** | **override** }
 
@@ -102,21 +105,28 @@ DESCRIPTION
                  **post_bind6** return from bind(2) for an inet6 socket (since 4.17);
                  **connect4** call to connect(2) for an inet4 socket (since 4.17);
                  **connect6** call to connect(2) for an inet6 socket (since 4.17);
+                 **connect_unix** call to connect(2) for a unix socket (since 6.7);
                  **sendmsg4** call to sendto(2), sendmsg(2), sendmmsg(2) for an
                  unconnected udp4 socket (since 4.18);
                  **sendmsg6** call to sendto(2), sendmsg(2), sendmmsg(2) for an
                  unconnected udp6 socket (since 4.18);
+                 **sendmsg_unix** call to sendto(2), sendmsg(2), sendmmsg(2) for
+                 an unconnected unix socket (since 6.7);
                  **recvmsg4** call to recvfrom(2), recvmsg(2), recvmmsg(2) for
                  an unconnected udp4 socket (since 5.2);
                  **recvmsg6** call to recvfrom(2), recvmsg(2), recvmmsg(2) for
                  an unconnected udp6 socket (since 5.2);
+                 **recvmsg_unix** call to recvfrom(2), recvmsg(2), recvmmsg(2) for
+                 an unconnected unix socket (since 6.7);
                  **sysctl** sysctl access (since 5.2);
                  **getsockopt** call to getsockopt (since 5.3);
                  **setsockopt** call to setsockopt (since 5.3);
                  **getpeername4** call to getpeername(2) for an inet4 socket (since 5.8);
                  **getpeername6** call to getpeername(2) for an inet6 socket (since 5.8);
+                 **getpeername_unix** call to getpeername(2) for a unix socket (since 6.7);
                  **getsockname4** call to getsockname(2) for an inet4 socket (since 5.8);
                  **getsockname6** call to getsockname(2) for an inet6 socket (since 5.8).
+                 **getsockname_unix** call to getsockname(2) for a unix socket (since 6.7);
                  **sock_release** closing an userspace inet socket (since 5.9).
 
        **bpftool cgroup detach** *CGROUP* *ATTACH_TYPE* *PROG*
index dcae81bd27ed2e48e68cd62e60959fec55a99f5c..58e6a5b10ef7cab44821a5176703ff3b037d0ed6 100644 (file)
@@ -47,9 +47,11 @@ PROG COMMANDS
 |              **cgroup/sock** | **cgroup/dev** | **lwt_in** | **lwt_out** | **lwt_xmit** |
 |              **lwt_seg6local** | **sockops** | **sk_skb** | **sk_msg** | **lirc_mode2** |
 |              **cgroup/bind4** | **cgroup/bind6** | **cgroup/post_bind4** | **cgroup/post_bind6** |
-|              **cgroup/connect4** | **cgroup/connect6** | **cgroup/getpeername4** | **cgroup/getpeername6** |
-|               **cgroup/getsockname4** | **cgroup/getsockname6** | **cgroup/sendmsg4** | **cgroup/sendmsg6** |
-|              **cgroup/recvmsg4** | **cgroup/recvmsg6** | **cgroup/sysctl** |
+|              **cgroup/connect4** | **cgroup/connect6** | **cgroup/connect_unix** |
+|              **cgroup/getpeername4** | **cgroup/getpeername6** | **cgroup/getpeername_unix** |
+|              **cgroup/getsockname4** | **cgroup/getsockname6** | **cgroup/getsockname_unix** |
+|              **cgroup/sendmsg4** | **cgroup/sendmsg6** | **cgroup/sendmsg_unix** |
+|              **cgroup/recvmsg4** | **cgroup/recvmsg6** | **cgroup/recvmsg_unix** | **cgroup/sysctl** |
 |              **cgroup/getsockopt** | **cgroup/setsockopt** | **cgroup/sock_release** |
 |              **struct_ops** | **fentry** | **fexit** | **freplace** | **sk_lookup**
 |      }
index 085bf18f3659ab901b3ca1061cf5e8be142b2f9b..6e4f7ce6bc01d4aa61cb83a90ac1c1609c738c22 100644 (file)
@@ -480,13 +480,13 @@ _bpftool()
                                 action tracepoint raw_tracepoint \
                                 xdp perf_event cgroup/skb cgroup/sock \
                                 cgroup/dev lwt_in lwt_out lwt_xmit \
-                                lwt_seg6local sockops sk_skb sk_msg \
-                                lirc_mode2 cgroup/bind4 cgroup/bind6 \
-                                cgroup/connect4 cgroup/connect6 \
-                                cgroup/getpeername4 cgroup/getpeername6 \
-                                cgroup/getsockname4 cgroup/getsockname6 \
-                                cgroup/sendmsg4 cgroup/sendmsg6 \
-                                cgroup/recvmsg4 cgroup/recvmsg6 \
+                                lwt_seg6local sockops sk_skb sk_msg lirc_mode2 \
+                                cgroup/bind4 cgroup/bind6 \
+                                cgroup/connect4 cgroup/connect6 cgroup/connect_unix \
+                                cgroup/getpeername4 cgroup/getpeername6 cgroup/getpeername_unix \
+                                cgroup/getsockname4 cgroup/getsockname6 cgroup/getsockname_unix \
+                                cgroup/sendmsg4 cgroup/sendmsg6 cgroup/sendmsg_unix \
+                                cgroup/recvmsg4 cgroup/recvmsg6 cgroup/recvmsg_unix \
                                 cgroup/post_bind4 cgroup/post_bind6 \
                                 cgroup/sysctl cgroup/getsockopt \
                                 cgroup/setsockopt cgroup/sock_release struct_ops \
index ac846b0805b45fdef692ef249e67de987502c7d2..af6898c0f388b6a7fb63c021e232622f0033bd18 100644 (file)
        "                        cgroup_device | cgroup_inet4_bind |\n" \
        "                        cgroup_inet6_bind | cgroup_inet4_post_bind |\n" \
        "                        cgroup_inet6_post_bind | cgroup_inet4_connect |\n" \
-       "                        cgroup_inet6_connect | cgroup_inet4_getpeername |\n" \
-       "                        cgroup_inet6_getpeername | cgroup_inet4_getsockname |\n" \
-       "                        cgroup_inet6_getsockname | cgroup_udp4_sendmsg |\n" \
-       "                        cgroup_udp6_sendmsg | cgroup_udp4_recvmsg |\n" \
-       "                        cgroup_udp6_recvmsg | cgroup_sysctl |\n" \
-       "                        cgroup_getsockopt | cgroup_setsockopt |\n" \
-       "                        cgroup_inet_sock_release }"
+       "                        cgroup_inet6_connect | cgroup_unix_connect |\n" \
+       "                        cgroup_inet4_getpeername | cgroup_inet6_getpeername |\n" \
+       "                        cgroup_unix_getpeername | cgroup_inet4_getsockname |\n" \
+       "                        cgroup_inet6_getsockname | cgroup_unix_getsockname |\n" \
+       "                        cgroup_udp4_sendmsg | cgroup_udp6_sendmsg |\n" \
+       "                        cgroup_unix_sendmsg | cgroup_udp4_recvmsg |\n" \
+       "                        cgroup_udp6_recvmsg | cgroup_unix_recvmsg |\n" \
+       "                        cgroup_sysctl | cgroup_getsockopt |\n" \
+       "                        cgroup_setsockopt | cgroup_inet_sock_release }"
 
 static unsigned int query_flags;
 static struct btf *btf_vmlinux;
index 8443a149dd17fd9024a623d29c4bfc12c7e14f89..7ec4f5671e7a97804fcd8f3cf8455347915e3010 100644 (file)
@@ -2475,9 +2475,10 @@ static int do_help(int argc, char **argv)
                "                 sk_reuseport | flow_dissector | cgroup/sysctl |\n"
                "                 cgroup/bind4 | cgroup/bind6 | cgroup/post_bind4 |\n"
                "                 cgroup/post_bind6 | cgroup/connect4 | cgroup/connect6 |\n"
-               "                 cgroup/getpeername4 | cgroup/getpeername6 |\n"
-               "                 cgroup/getsockname4 | cgroup/getsockname6 | cgroup/sendmsg4 |\n"
-               "                 cgroup/sendmsg6 | cgroup/recvmsg4 | cgroup/recvmsg6 |\n"
+               "                 cgroup/connect_unix | cgroup/getpeername4 | cgroup/getpeername6 |\n"
+               "                 cgroup/getpeername_unix | cgroup/getsockname4 | cgroup/getsockname6 |\n"
+               "                 cgroup/getsockname_unix | cgroup/sendmsg4 | cgroup/sendmsg6 |\n"
+               "                 cgroup/sendmsg°unix | cgroup/recvmsg4 | cgroup/recvmsg6 | cgroup/recvmsg_unix |\n"
                "                 cgroup/getsockopt | cgroup/setsockopt | cgroup/sock_release |\n"
                "                 struct_ops | fentry | fexit | freplace | sk_lookup }\n"
                "       ATTACH_TYPE := { sk_msg_verdict | sk_skb_verdict | sk_skb_stream_verdict |\n"