Message ID | 20250309132821.103046-2-aleksandr.mikhalitsyn@canonical.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Add getsockopt(SO_PEERCGROUPID) and fdinfo API to retreive socket's peer cgroup id | expand |
From: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com> Date: Sun, 9 Mar 2025 14:28:12 +0100 Please add few sentences here, why this interface is needed, why accessing peer sk's sk_cgrp_data is not racy (e.g. sk_cgrp_data never changes after creation (I'm not sure this is the case though)), etc. In case this interface is racy for the use case, please drop the patch. > Cc: linux-kernel@vger.kernel.org > Cc: netdev@vger.kernel.org > Cc: cgroups@vger.kernel.org > Cc: "David S. Miller" <davem@davemloft.net> > Cc: Eric Dumazet <edumazet@google.com> > Cc: Jakub Kicinski <kuba@kernel.org> > Cc: Paolo Abeni <pabeni@redhat.com> > Cc: Willem de Bruijn <willemb@google.com> > Cc: Leon Romanovsky <leon@kernel.org> > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Christian Brauner <brauner@kernel.org> > Cc: Kuniyuki Iwashima <kuniyu@amazon.com> > Cc: Lennart Poettering <mzxreary@0pointer.de> > Cc: Luca Boccassi <bluca@debian.org> > Cc: Tejun Heo <tj@kernel.org> > Cc: Johannes Weiner <hannes@cmpxchg.org> > Cc: "Michal Koutný" <mkoutny@suse.com> > Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com> > --- > net/unix/af_unix.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c > index 7f8f3859cdb3..2b2c0036efc9 100644 > --- a/net/unix/af_unix.c > +++ b/net/unix/af_unix.c > @@ -117,6 +117,7 @@ > #include <linux/file.h> > #include <linux/btf_ids.h> > #include <linux/bpf-cgroup.h> > +#include <linux/cgroup.h> > > static atomic_long_t unix_nr_socks; > static struct hlist_head bsd_socket_buckets[UNIX_HASH_SIZE / 2]; > @@ -861,6 +862,11 @@ static void unix_show_fdinfo(struct seq_file *m, struct socket *sock) > int nr_fds = 0; > > if (sk) { > +#ifdef CONFIG_SOCK_CGROUP_DATA > + struct sock *peer; > + u64 sk_cgroup_id = 0; Please keep reverse xmas tree order for net patches. https://docs.kernel.org/process/maintainer-netdev.html#local-variable-ordering-reverse-xmas-tree-rcs Also, no need to initialise sk_cgroup_id, so it should be: struct sock *peer; u64 sk_cgroup_id; > +#endif > + > s_state = READ_ONCE(sk->sk_state); > u = unix_sk(sk); > > @@ -874,6 +880,21 @@ static void unix_show_fdinfo(struct seq_file *m, struct socket *sock) > nr_fds = unix_count_nr_fds(sk); > > seq_printf(m, "scm_fds: %u\n", nr_fds); > + > +#ifdef CONFIG_SOCK_CGROUP_DATA > + sk_cgroup_id = cgroup_id(sock_cgroup_ptr(&sk->sk_cgrp_data)); > + seq_printf(m, "cgroup_id: %llu\n", sk_cgroup_id); > + > + peer = unix_peer_get(sk); > + if (peer) { > + u64 peer_cgroup_id = 0; Same here, no need to initialise peer_cgroup_id. > + > + peer_cgroup_id = cgroup_id(sock_cgroup_ptr(&peer->sk_cgrp_data)); > + sock_put(peer); > + > + seq_printf(m, "peer_cgroup_id: %llu\n", peer_cgroup_id); > + } > +#endif > } > } > #else > -- > 2.43.0 Thanks!
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 7f8f3859cdb3..2b2c0036efc9 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -117,6 +117,7 @@ #include <linux/file.h> #include <linux/btf_ids.h> #include <linux/bpf-cgroup.h> +#include <linux/cgroup.h> static atomic_long_t unix_nr_socks; static struct hlist_head bsd_socket_buckets[UNIX_HASH_SIZE / 2]; @@ -861,6 +862,11 @@ static void unix_show_fdinfo(struct seq_file *m, struct socket *sock) int nr_fds = 0; if (sk) { +#ifdef CONFIG_SOCK_CGROUP_DATA + struct sock *peer; + u64 sk_cgroup_id = 0; +#endif + s_state = READ_ONCE(sk->sk_state); u = unix_sk(sk); @@ -874,6 +880,21 @@ static void unix_show_fdinfo(struct seq_file *m, struct socket *sock) nr_fds = unix_count_nr_fds(sk); seq_printf(m, "scm_fds: %u\n", nr_fds); + +#ifdef CONFIG_SOCK_CGROUP_DATA + sk_cgroup_id = cgroup_id(sock_cgroup_ptr(&sk->sk_cgrp_data)); + seq_printf(m, "cgroup_id: %llu\n", sk_cgroup_id); + + peer = unix_peer_get(sk); + if (peer) { + u64 peer_cgroup_id = 0; + + peer_cgroup_id = cgroup_id(sock_cgroup_ptr(&peer->sk_cgrp_data)); + sock_put(peer); + + seq_printf(m, "peer_cgroup_id: %llu\n", peer_cgroup_id); + } +#endif } } #else
Cc: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org Cc: cgroups@vger.kernel.org Cc: "David S. Miller" <davem@davemloft.net> Cc: Eric Dumazet <edumazet@google.com> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Paolo Abeni <pabeni@redhat.com> Cc: Willem de Bruijn <willemb@google.com> Cc: Leon Romanovsky <leon@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Christian Brauner <brauner@kernel.org> Cc: Kuniyuki Iwashima <kuniyu@amazon.com> Cc: Lennart Poettering <mzxreary@0pointer.de> Cc: Luca Boccassi <bluca@debian.org> Cc: Tejun Heo <tj@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Michal Koutný" <mkoutny@suse.com> Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com> --- net/unix/af_unix.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)