All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info
@ 2023-05-05  2:03 Patryk Sondej
  0 siblings, 0 replies; 6+ messages in thread
From: Patryk Sondej @ 2023-05-05  2:03 UTC (permalink / raw)
  To: netfilter

Hi all,

I'd like to propose this patchset that adds support for retrieving cgroupv2 ID. 
This functionality is useful for processing per-cgroup packets in userspace using nfnetlink_log, 
or writing per-cgroup rules using nfnetlink_queue.

Please find the two patches attached.

Thanks for your consideration.

Best regards,
Patryk



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info
@ 2023-05-08  3:14 Patryk Sondej
  2023-05-08  3:14 ` [PATCH 1/2] netfilter: nfnetlink_log: enable cgroup id socket info retrieval Patryk Sondej
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Patryk Sondej @ 2023-05-08  3:14 UTC (permalink / raw)
  To: netfilter-devel; +Cc: eric_sage

Hi all,

I'd like to propose this patchset that adds support for retrieving cgroupv2 ID.
This functionality is useful for processing per-cgroup packets in userspace using nfnetlink_log,
or writing per-cgroup rules using nfnetlink_queue.

This is my first contribution to the kernel, so I would greatly appreciate any feedback or suggestions for improvement.

Please find the two patches attached.

Thanks for your consideration.

Best regards,
Patryk

[PATCH 1/2] netfilter: nfnetlink_log: enable cgroup id socket info
[PATCH 2/2] netfilter: nfnetlink_queue: enable cgroup id socket info


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] netfilter: nfnetlink_log: enable cgroup id socket info retrieval
  2023-05-08  3:14 [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Patryk Sondej
@ 2023-05-08  3:14 ` Patryk Sondej
  2023-05-08  3:14 ` [PATCH 2/2] netfilter: nfnetlink_queue: " Patryk Sondej
  2023-05-09 10:00 ` [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Florian Westphal
  2 siblings, 0 replies; 6+ messages in thread
From: Patryk Sondej @ 2023-05-08  3:14 UTC (permalink / raw)
  To: netfilter-devel; +Cc: eric_sage, Patryk Sondej

This enables associating a socket with a v2 cgroup. Useful processing
packets in userspace.

Signed-off-by: Patryk Sondej <patryk.sondej@gmail.com>
---
 include/uapi/linux/netfilter/nfnetlink_log.h |  2 ++
 net/netfilter/nfnetlink_log.c                | 13 +++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/include/uapi/linux/netfilter/nfnetlink_log.h b/include/uapi/linux/netfilter/nfnetlink_log.h
index 0af9c113d665..5f4500e1c28c 100644
--- a/include/uapi/linux/netfilter/nfnetlink_log.h
+++ b/include/uapi/linux/netfilter/nfnetlink_log.h
@@ -65,6 +65,8 @@ enum nfulnl_attr_type {
 	NFULA_CT_INFO,                  /* enum ip_conntrack_info */
 	NFULA_VLAN,			/* nested attribute: packet vlan info */
 	NFULA_L2HDR,			/* full L2 header */
+	NFULA_CGROUP_ID,		/* __u64 cgroup2 id of socket */
+	NFULA_PAD,			/* 64bit padding */
 
 	__NFULA_MAX
 };
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
index e57eb168ee13..5d11d070ad24 100644
--- a/net/netfilter/nfnetlink_log.c
+++ b/net/netfilter/nfnetlink_log.c
@@ -31,6 +31,7 @@
 #include <linux/security.h>
 #include <linux/list.h>
 #include <linux/slab.h>
+#include <linux/cgroup.h>
 #include <net/sock.h>
 #include <net/netfilter/nf_log.h>
 #include <net/netns/generic.h>
@@ -628,6 +629,15 @@ __build_packet_message(struct nfnl_log_net *log,
 			read_unlock_bh(&sk->sk_callback_lock);
 	}
 
+#if IS_ENABLED(CONFIG_SOCK_CGROUP_DATA)
+	/* cgroup2 */
+	if (sk && sk_fullsock(sk)) {
+		struct cgroup *cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data);
+		if(cgrp && nla_put_be64(inst->skb, NFULA_CGROUP_ID, cpu_to_be64(cgroup_id(cgrp)), NFULA_PAD))
+			goto nla_put_failure;
+	}
+#endif
+
 	/* local sequence number */
 	if ((inst->flags & NFULNL_CFG_F_SEQ) &&
 	    nla_put_be32(inst->skb, NFULA_SEQ, htonl(inst->seq++)))
@@ -729,6 +739,9 @@ nfulnl_log_packet(struct net *net,
 		+ nla_total_size(sizeof(u_int32_t))	/* mark */
 		+ nla_total_size(sizeof(u_int32_t))	/* uid */
 		+ nla_total_size(sizeof(u_int32_t))	/* gid */
+#if IS_ENABLED(CONFIG_SOCK_CGROUP_DATA)
+		+ nla_total_size(sizeof(u_int64_t))	/* cgroup2 id */
+#endif
 		+ nla_total_size(plen)			/* prefix */
 		+ nla_total_size(sizeof(struct nfulnl_msg_packet_hw))
 		+ nla_total_size(sizeof(struct nfulnl_msg_packet_timestamp))
-- 
2.37.1 (Apple Git-137.1)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] netfilter: nfnetlink_queue: enable cgroup id socket info retrieval
  2023-05-08  3:14 [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Patryk Sondej
  2023-05-08  3:14 ` [PATCH 1/2] netfilter: nfnetlink_log: enable cgroup id socket info retrieval Patryk Sondej
@ 2023-05-08  3:14 ` Patryk Sondej
  2023-05-08  7:52   ` kernel test robot
  2023-05-09 10:00 ` [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Florian Westphal
  2 siblings, 1 reply; 6+ messages in thread
From: Patryk Sondej @ 2023-05-08  3:14 UTC (permalink / raw)
  To: netfilter-devel; +Cc: eric_sage, Patryk Sondej

This enables associating a socket with a v2 cgroup. Useful for
applying a per-cgroup policy when processing packets in userspace.

Signed-off-by: Patryk Sondej <patryk.sondej@gmail.com>
---
 .../uapi/linux/netfilter/nfnetlink_queue.h    |  2 ++
 net/netfilter/nfnetlink_queue.c               | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/include/uapi/linux/netfilter/nfnetlink_queue.h b/include/uapi/linux/netfilter/nfnetlink_queue.h
index efcb7c044a74..681c02290d39 100644
--- a/include/uapi/linux/netfilter/nfnetlink_queue.h
+++ b/include/uapi/linux/netfilter/nfnetlink_queue.h
@@ -63,6 +63,8 @@ enum nfqnl_attr_type {
 	NFQA_L2HDR,			/* full L2 header */
 	NFQA_PRIORITY,			/* skb->priority */
 	NFQA_CGROUP_CLASSID,		/* __u32 cgroup classid */
+	NFQA_CGROUP_ID,			/* __u64 cgroup2 id of socket */
+	NFQA_PAD,			/* 64bit padding */
 
 	__NFQA_MAX
 };
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index e311462f6d98..c9c473d523c5 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -30,6 +30,7 @@
 #include <linux/netfilter/nf_conntrack_common.h>
 #include <linux/list.h>
 #include <linux/cgroup-defs.h>
+#include <linux/cgroup.h>
 #include <net/sock.h>
 #include <net/tcp_states.h>
 #include <net/netfilter/nf_queue.h>
@@ -302,6 +303,18 @@ static int nfqnl_put_sk_uidgid(struct sk_buff *skb, struct sock *sk)
 	return -1;
 }
 
+static int nfqnl_put_sk_cgroupid(struct sk_buff *skb, struct sock *sk)
+{
+#if IS_ENABLED(CONFIG_SOCK_CGROUP_DATA)
+	if (sk && sk_fullsock(sk)) {
+		struct cgroup *cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data);
+		if (cgrp && nla_put_be64(inst->skb, NFQA_CGROUP_ID, cpu_to_be64(cgroup_id(cgrp)), NFQA_PAD))
+			return -1;
+	}
+#endif
+	return 0;
+}
+
 static int nfqnl_put_sk_classid(struct sk_buff *skb, struct sock *sk)
 {
 #if IS_ENABLED(CONFIG_CGROUP_NET_CLASSID)
@@ -420,6 +433,9 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
 		+ nla_total_size(sizeof(u_int32_t))	/* priority */
 		+ nla_total_size(sizeof(struct nfqnl_msg_packet_hw))
 		+ nla_total_size(sizeof(u_int32_t))	/* skbinfo */
+#if IS_ENABLED(CONFIG_SOCK_CGROUP_DATA)
+		+ nla_total_size(sizeof(u_int64_t))	/* cgroup2 id */
+#endif
 #if IS_ENABLED(CONFIG_CGROUP_NET_CLASSID)
 		+ nla_total_size(sizeof(u_int32_t))	/* classid */
 #endif
@@ -616,6 +632,9 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
 	    nfqnl_put_sk_uidgid(skb, entskb->sk) < 0)
 		goto nla_put_failure;
 
+	if (nfqnl_put_sk_cgroupid(skb, entskb->sk) < 0)
+		goto nla_put_failure;
+
 	if (nfqnl_put_sk_classid(skb, entskb->sk) < 0)
 		goto nla_put_failure;
 
-- 
2.37.1 (Apple Git-137.1)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] netfilter: nfnetlink_queue: enable cgroup id socket info retrieval
  2023-05-08  3:14 ` [PATCH 2/2] netfilter: nfnetlink_queue: " Patryk Sondej
@ 2023-05-08  7:52   ` kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2023-05-08  7:52 UTC (permalink / raw)
  To: Patryk Sondej, netfilter-devel; +Cc: oe-kbuild-all, eric_sage, Patryk Sondej

Hi Patryk,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.4-rc1 next-20230508]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Patryk-Sondej/netfilter-nfnetlink_log-enable-cgroup-id-socket-info-retrieval/20230508-111728
base:   linus/master
patch link:    https://lore.kernel.org/r/20230508031424.55383-3-patryk.sondej%40gmail.com
patch subject: [PATCH 2/2] netfilter: nfnetlink_queue: enable cgroup id socket info retrieval
config: loongarch-defconfig (https://download.01.org/0day-ci/archive/20230508/202305081525.uKfLJoAa-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/275a8dc37e28e6be21d6f429b81f388de1cde7f6
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Patryk-Sondej/netfilter-nfnetlink_log-enable-cgroup-id-socket-info-retrieval/20230508-111728
        git checkout 275a8dc37e28e6be21d6f429b81f388de1cde7f6
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=loongarch olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=loongarch SHELL=/bin/bash net/netfilter/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305081525.uKfLJoAa-lkp@intel.com/

All errors (new ones prefixed by >>):

   net/netfilter/nfnetlink_queue.c: In function 'nfqnl_put_sk_cgroupid':
>> net/netfilter/nfnetlink_queue.c:311:42: error: 'inst' undeclared (first use in this function); did you mean 'insl'?
     311 |                 if (cgrp && nla_put_be64(inst->skb, NFQA_CGROUP_ID, cpu_to_be64(cgroup_id(cgrp)), NFQA_PAD))
         |                                          ^~~~
         |                                          insl
   net/netfilter/nfnetlink_queue.c:311:42: note: each undeclared identifier is reported only once for each function it appears in


vim +311 net/netfilter/nfnetlink_queue.c

   305	
   306	static int nfqnl_put_sk_cgroupid(struct sk_buff *skb, struct sock *sk)
   307	{
   308	#if IS_ENABLED(CONFIG_SOCK_CGROUP_DATA)
   309		if (sk && sk_fullsock(sk)) {
   310			struct cgroup *cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data);
 > 311			if (cgrp && nla_put_be64(inst->skb, NFQA_CGROUP_ID, cpu_to_be64(cgroup_id(cgrp)), NFQA_PAD))
   312				return -1;
   313		}
   314	#endif
   315		return 0;
   316	}
   317	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info
  2023-05-08  3:14 [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Patryk Sondej
  2023-05-08  3:14 ` [PATCH 1/2] netfilter: nfnetlink_log: enable cgroup id socket info retrieval Patryk Sondej
  2023-05-08  3:14 ` [PATCH 2/2] netfilter: nfnetlink_queue: " Patryk Sondej
@ 2023-05-09 10:00 ` Florian Westphal
  2 siblings, 0 replies; 6+ messages in thread
From: Florian Westphal @ 2023-05-09 10:00 UTC (permalink / raw)
  To: Patryk Sondej; +Cc: netfilter-devel, eric_sage

Patryk Sondej <patryk.sondej@gmail.com> wrote:
> Hi all,
> 
> I'd like to propose this patchset that adds support for retrieving cgroupv2 ID.
> This functionality is useful for processing per-cgroup packets in userspace using nfnetlink_log,
> or writing per-cgroup rules using nfnetlink_queue.
> 
> This is my first contribution to the kernel, so I would greatly appreciate any feedback or suggestions for improvement.

Please fix the build error reported for 2/2 and resubmit.

Your subject line for v2 should contain '[PATCH nf-next v2]'.

Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-05-09 10:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-08  3:14 [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Patryk Sondej
2023-05-08  3:14 ` [PATCH 1/2] netfilter: nfnetlink_log: enable cgroup id socket info retrieval Patryk Sondej
2023-05-08  3:14 ` [PATCH 2/2] netfilter: nfnetlink_queue: " Patryk Sondej
2023-05-08  7:52   ` kernel test robot
2023-05-09 10:00 ` [PATCH 0/2] netfilter: nfnetlink_log & nfnetlink_queue: enable cgroup id socket info Florian Westphal
  -- strict thread matches above, loose matches on Subject: below --
2023-05-05  2:03 Patryk Sondej

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.