All of lore.kernel.org
 help / color / mirror / Atom feed
* memory leak in mrp_request_join
@ 2020-01-21 19:27 syzbot
  2020-01-22  7:26 ` [PATCH] net/802/mrp: disconnect on uninit Dan Carpenter
  0 siblings, 1 reply; 3+ messages in thread
From: syzbot @ 2020-01-21 19:27 UTC (permalink / raw)
  To: allison, davem, keescook, kstewart, linux-kernel, netdev,
	pankaj.laxminarayan.bharadiya, syzkaller-bugs, tglx

Hello,

syzbot found the following crash on:

HEAD commit:    d96d875e Merge tag 'fixes_for_v5.5-rc8' of git://git.kerne..
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=14cd8185e00000
kernel config:  https://syzkaller.appspot.com/x/.config?x=15478c61c836a72e
dashboard link: https://syzkaller.appspot.com/bug?extid=5cfab121b54dff775399
compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=14dbe201e00000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=13e03cf1e00000

IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: syzbot+5cfab121b54dff775399@syzkaller.appspotmail.com

executing program
BUG: memory leak
unreferenced object 0xffff888120b85c40 (size 64):
  comm "syz-executor783", pid 7302, jiffies 4294942613 (age 14.030s)
  hex dump (first 32 bytes):
    01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 01 00 00 00 01 02 00 00  ................
  backtrace:
    [<000000000312cb0f>] kmemleak_alloc_recursive include/linux/kmemleak.h:43 [inline]
    [<000000000312cb0f>] slab_post_alloc_hook mm/slab.h:586 [inline]
    [<000000000312cb0f>] slab_alloc mm/slab.c:3320 [inline]
    [<000000000312cb0f>] __do_kmalloc mm/slab.c:3654 [inline]
    [<000000000312cb0f>] __kmalloc+0x169/0x300 mm/slab.c:3665
    [<0000000011736472>] kmalloc include/linux/slab.h:561 [inline]
    [<0000000011736472>] mrp_attr_create net/802/mrp.c:276 [inline]
    [<0000000011736472>] mrp_request_join+0x13d/0x220 net/802/mrp.c:530
    [<000000003ff9bf8f>] vlan_mvrp_request_join+0x86/0x90 net/8021q/vlan_mvrp.c:40
    [<0000000020a13a26>] vlan_dev_open+0x154/0x290 net/8021q/vlan_dev.c:293
    [<0000000010d96d5d>] __dev_open+0x109/0x1b0 net/core/dev.c:1431
    [<00000000e9578876>] __dev_change_flags+0x246/0x2c0 net/core/dev.c:8103
    [<000000002c92e0e1>] rtnl_configure_link+0x57/0x100 net/core/rtnetlink.c:2996
    [<000000000504898e>] __rtnl_newlink+0x8b9/0xb80 net/core/rtnetlink.c:3323
    [<00000000eb645fa3>] rtnl_newlink+0x4e/0x80 net/core/rtnetlink.c:3363
    [<0000000034f28a5d>] rtnetlink_rcv_msg+0x178/0x4b0 net/core/rtnetlink.c:5424
    [<00000000dc499e73>] netlink_rcv_skb+0x61/0x170 net/netlink/af_netlink.c:2477
    [<00000000b6cd4d73>] rtnetlink_rcv+0x1d/0x30 net/core/rtnetlink.c:5442
    [<0000000092a30a6a>] netlink_unicast_kernel net/netlink/af_netlink.c:1302 [inline]
    [<0000000092a30a6a>] netlink_unicast+0x223/0x310 net/netlink/af_netlink.c:1328
    [<0000000006ceb85b>] netlink_sendmsg+0x2c0/0x570 net/netlink/af_netlink.c:1917
    [<000000009199ec36>] sock_sendmsg_nosec net/socket.c:639 [inline]
    [<000000009199ec36>] sock_sendmsg+0x54/0x70 net/socket.c:659
    [<000000002acd085e>] ____sys_sendmsg+0x2d0/0x300 net/socket.c:2330



---
This bug is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this bug report. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
syzbot can test patches for this bug, for details see:
https://goo.gl/tpsmEJ#testing-patches

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

* [PATCH] net/802/mrp: disconnect on uninit
  2020-01-21 19:27 memory leak in mrp_request_join syzbot
@ 2020-01-22  7:26 ` Dan Carpenter
  2020-01-27  9:47   ` David Miller
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2020-01-22  7:26 UTC (permalink / raw)
  To: David S. Miller, syzbot, allison, keescook, kstewart,
	linux-kernel, netdev, pankaj.laxminarayan.bharadiya,
	syzkaller-bugs, tglx

[  I was investigating this bug and I sort of got carried away and wrote
   a patch.  I'm going to see if I can find a test system to start
   testing these patches then I will resend the patch.  - dan ]

Syzbot discovered that mrp_attr attr structs are being leaked.  They're
supposed to be freed by mrp_attr_destroy() which is called from
mrp_attr_event().

I think that when we close everything down, we're supposed to send one
last disconnect event but the code for that wasn't fully implemented.

Reported-by: syzbot+5cfab121b54dff775399@syzkaller.appspotmail.com
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
Not tested.  Idea only.

 net/802/mrp.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/net/802/mrp.c b/net/802/mrp.c
index bea6e43d45a0..f1d71cd68a79 100644
--- a/net/802/mrp.c
+++ b/net/802/mrp.c
@@ -562,7 +562,9 @@ void mrp_request_leave(const struct net_device *dev,
 }
 EXPORT_SYMBOL_GPL(mrp_request_leave);
 
-static void mrp_mad_event(struct mrp_applicant *app, enum mrp_event event)
+static void mrp_mad_event_helper(struct mrp_applicant *app,
+				 enum mrp_event event,
+				 int state)
 {
 	struct rb_node *node, *next;
 	struct mrp_attr *attr;
@@ -571,10 +573,24 @@ static void mrp_mad_event(struct mrp_applicant *app, enum mrp_event event)
 	     next = node ? rb_next(node) : NULL, node != NULL;
 	     node = next) {
 		attr = rb_entry(node, struct mrp_attr, node);
+		if (state != -1)
+			attr->state = state;
 		mrp_attr_event(app, attr, event);
 	}
 }
 
+static void mrp_mad_event(struct mrp_applicant *app, enum mrp_event event)
+{
+	mrp_mad_event_helper(app, event, -1);
+}
+
+static void mrp_mad_event_state(struct mrp_applicant *app,
+				enum mrp_event event,
+				enum mrp_applicant_state state)
+{
+	mrp_mad_event_helper(app, event, state);
+}
+
 static void mrp_join_timer_arm(struct mrp_applicant *app)
 {
 	unsigned long delay;
@@ -894,7 +910,7 @@ void mrp_uninit_applicant(struct net_device *dev, struct mrp_application *appl)
 	del_timer_sync(&app->periodic_timer);
 
 	spin_lock_bh(&app->lock);
-	mrp_mad_event(app, MRP_EVENT_TX);
+	mrp_mad_event_state(app, MRP_EVENT_TX, MRP_APPLICANT_LA);
 	mrp_pdu_queue(app);
 	spin_unlock_bh(&app->lock);
 
-- 
2.11.0


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

* Re: [PATCH] net/802/mrp: disconnect on uninit
  2020-01-22  7:26 ` [PATCH] net/802/mrp: disconnect on uninit Dan Carpenter
@ 2020-01-27  9:47   ` David Miller
  0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2020-01-27  9:47 UTC (permalink / raw)
  To: dan.carpenter
  Cc: syzbot+5cfab121b54dff775399, allison, keescook, kstewart,
	linux-kernel, netdev, pankaj.laxminarayan.bharadiya,
	syzkaller-bugs, tglx

From: Dan Carpenter <dan.carpenter@oracle.com>
Date: Wed, 22 Jan 2020 10:26:04 +0300

> [  I was investigating this bug and I sort of got carried away and wrote
>    a patch.  I'm going to see if I can find a test system to start
>    testing these patches then I will resend the patch.  - dan ]
> 
> Syzbot discovered that mrp_attr attr structs are being leaked.  They're
> supposed to be freed by mrp_attr_destroy() which is called from
> mrp_attr_event().
> 
> I think that when we close everything down, we're supposed to send one
> last disconnect event but the code for that wasn't fully implemented.
> 
> Reported-by: syzbot+5cfab121b54dff775399@syzkaller.appspotmail.com
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> Not tested.  Idea only.

Yes, please resend this when it is tested, somehow, by someone :-)

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

end of thread, other threads:[~2020-01-27  9:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-21 19:27 memory leak in mrp_request_join syzbot
2020-01-22  7:26 ` [PATCH] net/802/mrp: disconnect on uninit Dan Carpenter
2020-01-27  9:47   ` David Miller

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.