kernel: act_ctinfo: backport memory leak fix
[ Upstream commit 09d4f10a5e78d76a53e3e584f1e6a701b6d24108 ]
Implement a cleanup method to properly free ci->params
BUG: memory leak
unreferenced object 0xffff88811746e2c0 (size 64):
 comm "syz-executor617", pid 7106, jiffies 4294943055 (age 14.250s)
 hex dump (first 32 bytes):
   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
   c0 34 60 84 ff ff ff ff 00 00 00 00 00 00 00 00  .4`.............
 backtrace:
   [<0000000015aa236f>] kmemleak_alloc_recursive include/linux/kmemleak.h:43 [inline]
   [<0000000015aa236f>] slab_post_alloc_hook mm/slab.h:586 [inline]
   [<0000000015aa236f>] slab_alloc mm/slab.c:3320 [inline]
   [<0000000015aa236f>] kmem_cache_alloc_trace+0x145/0x2c0 mm/slab.c:3549
   [<000000002c946bd1>] kmalloc include/linux/slab.h:556 [inline]
   [<000000002c946bd1>] kzalloc include/linux/slab.h:670 [inline]
   [<000000002c946bd1>] tcf_ctinfo_init+0x21a/0x530 net/sched/act_ctinfo.c:236
   [<0000000086952cca>] tcf_action_init_1+0x400/0x5b0 net/sched/act_api.c:944
   [<000000005ab29bf8>] tcf_action_init+0x135/0x1c0 net/sched/act_api.c:1000
   [<00000000392f56f9>] tcf_action_add+0x9a/0x200 net/sched/act_api.c:1410
   [<0000000088f3c5dd>] tc_ctl_action+0x14d/0x1bb net/sched/act_api.c:1465
   [<000000006b39d986>] rtnetlink_rcv_msg+0x178/0x4b0 net/core/rtnetlink.c:5424
   [<00000000fd6ecace>] netlink_rcv_skb+0x61/0x170 net/netlink/af_netlink.c:2477
   [<0000000047493d02>] rtnetlink_rcv+0x1d/0x30 net/core/rtnetlink.c:5442
   [<00000000bdcf8286>] netlink_unicast_kernel net/netlink/af_netlink.c:1302 [inline]
   [<00000000bdcf8286>] netlink_unicast+0x223/0x310 net/netlink/af_netlink.c:1328
   [<00000000fc5b92d9>] netlink_sendmsg+0x2c0/0x570 net/netlink/af_netlink.c:1917
   [<00000000da84d076>] sock_sendmsg_nosec net/socket.c:639 [inline]
   [<00000000da84d076>] sock_sendmsg+0x54/0x70 net/socket.c:659
   [<0000000042fb2eee>] ____sys_sendmsg+0x2d0/0x300 net/socket.c:2330
   [<000000008f23f67e>] ___sys_sendmsg+0x8a/0xd0 net/socket.c:2384
   [<00000000d838e4f6>] __sys_sendmsg+0x80/0xf0 net/socket.c:2417
   [<00000000289a9cb1>] __do_sys_sendmsg net/socket.c:2426 [inline]
   [<00000000289a9cb1>] __se_sys_sendmsg net/socket.c:2424 [inline]
   [<00000000289a9cb1>] __x64_sys_sendmsg+0x23/0x30 net/socket.c:2424
Fixes: 24ec483cec98 ("net: sched: Introduce act_ctinfo action")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Toke Høiland-Jørgensen <toke@redhat.com>
Acked-by: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
			
			
This commit is contained in:
		
							parent
							
								
									4576a753f2
								
							
						
					
					
						commit
						7a57e82f28
					
				@ -1,4 +1,4 @@
 | 
			
		||||
From 147b0d133b53635db0cc572294840652c9c7b662 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From 85fc2a6db8279c5e43c38ef7e715d14e57287997 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
Date: Wed, 13 Mar 2019 20:54:49 +0000
 | 
			
		||||
Subject: [PATCH] net: sched: Backport Introduce act_ctinfo action
 | 
			
		||||
@ -112,8 +112,8 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
 include/uapi/linux/tc_act/tc_ctinfo.h |  29 ++
 | 
			
		||||
 net/sched/Kconfig                     |  13 +
 | 
			
		||||
 net/sched/Makefile                    |   1 +
 | 
			
		||||
 net/sched/act_ctinfo.c                | 394 ++++++++++++++++++++++++++
 | 
			
		||||
 6 files changed, 472 insertions(+), 1 deletion(-)
 | 
			
		||||
 net/sched/act_ctinfo.c                | 404 ++++++++++++++++++++++++++
 | 
			
		||||
 6 files changed, 482 insertions(+), 1 deletion(-)
 | 
			
		||||
 create mode 100644 include/net/tc_act/tc_ctinfo.h
 | 
			
		||||
 create mode 100644 include/uapi/linux/tc_act/tc_ctinfo.h
 | 
			
		||||
 create mode 100644 net/sched/act_ctinfo.c
 | 
			
		||||
@ -232,7 +232,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
 obj-$(CONFIG_NET_IFE_SKBMARK)	+= act_meta_mark.o
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/net/sched/act_ctinfo.c
 | 
			
		||||
@@ -0,0 +1,394 @@
 | 
			
		||||
@@ -0,0 +1,404 @@
 | 
			
		||||
+// SPDX-License-Identifier: GPL-2.0+
 | 
			
		||||
+/* net/sched/act_ctinfo.c  netfilter ctinfo connmark actions
 | 
			
		||||
+ *
 | 
			
		||||
@ -579,6 +579,15 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
+	return tcf_idr_search(tn, a, index);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+{
 | 
			
		||||
+	struct tcf_ctinfo *ci = to_ctinfo(a);
 | 
			
		||||
+	struct tcf_ctinfo_params *cp;
 | 
			
		||||
+
 | 
			
		||||
+	cp = rcu_dereference_protected(ci->params, 1);
 | 
			
		||||
+	if (cp)
 | 
			
		||||
+		kfree_rcu(cp, rcu);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static struct tc_action_ops act_ctinfo_ops = {
 | 
			
		||||
+	.kind	= "ctinfo",
 | 
			
		||||
+	.type	= TCA_ID_CTINFO,
 | 
			
		||||
@ -586,6 +595,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
+	.act	= tcf_ctinfo_act,
 | 
			
		||||
+	.dump	= tcf_ctinfo_dump,
 | 
			
		||||
+	.init	= tcf_ctinfo_init,
 | 
			
		||||
+	.cleanup= tcf_ctinfo_cleanup,
 | 
			
		||||
+	.walk	= tcf_ctinfo_walker,
 | 
			
		||||
+	.lookup	= tcf_ctinfo_search,
 | 
			
		||||
+	.size	= sizeof(struct tcf_ctinfo),
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
From 6d8071bbbdcd9d3a2fbb49e55b51617906e3b816 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From d129a72f465dab2d9fc8f1580c38600a8b808327 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
Date: Wed, 13 Mar 2019 20:54:49 +0000
 | 
			
		||||
Subject: [PATCH] net: sched: Backport Introduce act_ctinfo action
 | 
			
		||||
@ -112,9 +112,9 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
 include/uapi/linux/tc_act/tc_ctinfo.h     |  29 ++
 | 
			
		||||
 net/sched/Kconfig                         |  17 +
 | 
			
		||||
 net/sched/Makefile                        |   1 +
 | 
			
		||||
 net/sched/act_ctinfo.c                    | 409 ++++++++++++++++++++++
 | 
			
		||||
 net/sched/act_ctinfo.c                    | 420 ++++++++++++++++++++++
 | 
			
		||||
 tools/testing/selftests/tc-testing/config |   1 +
 | 
			
		||||
 7 files changed, 492 insertions(+), 1 deletion(-)
 | 
			
		||||
 7 files changed, 503 insertions(+), 1 deletion(-)
 | 
			
		||||
 create mode 100644 include/net/tc_act/tc_ctinfo.h
 | 
			
		||||
 create mode 100644 include/uapi/linux/tc_act/tc_ctinfo.h
 | 
			
		||||
 create mode 100644 net/sched/act_ctinfo.c
 | 
			
		||||
@ -237,7 +237,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
 obj-$(CONFIG_NET_IFE_SKBMARK)	+= act_meta_mark.o
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/net/sched/act_ctinfo.c
 | 
			
		||||
@@ -0,0 +1,409 @@
 | 
			
		||||
@@ -0,0 +1,420 @@
 | 
			
		||||
+// SPDX-License-Identifier: GPL-2.0+
 | 
			
		||||
+/* net/sched/act_ctinfo.c  netfilter ctinfo connmark actions
 | 
			
		||||
+ *
 | 
			
		||||
@ -601,6 +601,16 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
+	return tcf_idr_search(tn, a, index);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static void tcf_ctinfo_cleanup(struct tc_action *a)
 | 
			
		||||
+{
 | 
			
		||||
+	struct tcf_ctinfo *ci = to_ctinfo(a);
 | 
			
		||||
+	struct tcf_ctinfo_params *cp;
 | 
			
		||||
+
 | 
			
		||||
+	cp = rcu_dereference_protected(ci->params, 1);
 | 
			
		||||
+	if (cp)
 | 
			
		||||
+		kfree_rcu(cp, rcu);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static struct tc_action_ops act_ctinfo_ops = {
 | 
			
		||||
+	.kind	= "ctinfo",
 | 
			
		||||
+	.type	= TCA_ID_CTINFO,
 | 
			
		||||
@ -609,6 +619,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
 | 
			
		||||
+	.dump	= tcf_ctinfo_dump,
 | 
			
		||||
+	.init	= tcf_ctinfo_init,
 | 
			
		||||
+	.walk	= tcf_ctinfo_walker,
 | 
			
		||||
+	.cleanup= tcf_ctinfo_cleanup,
 | 
			
		||||
+	.lookup	= tcf_ctinfo_search,
 | 
			
		||||
+	.size	= sizeof(struct tcf_ctinfo),
 | 
			
		||||
+};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user