Linux-Fsdevel Archive on lore.kernel.org
help / color / mirror / Atom feed
* memory leak in do_eventfd
@ 2020-05-21  1:12 syzbot
  2020-06-05  4:24 ` Eric Biggers
  0 siblings, 1 reply; 3+ messages in thread
From: syzbot @ 2020-05-21  1:12 UTC (permalink / raw)
  To: linux-fsdevel, linux-kernel, syzkaller-bugs, viro

Hello,

syzbot found the following crash on:

HEAD commit:    5a9ffb95 Merge tag '5.7-rc5-smb3-fixes' of git://git.samba..
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=10b72a02100000
kernel config:  https://syzkaller.appspot.com/x/.config?x=f8295ae5b3f8268d
dashboard link: https://syzkaller.appspot.com/bug?extid=f196caa45793d6374707
compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=17585b76100000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=12500a02100000

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

BUG: memory leak
unreferenced object 0xffff888117169ac0 (size 64):
  comm "syz-executor012", pid 6609, jiffies 4294942172 (age 13.720s)
  hex dump (first 32 bytes):
    01 00 00 00 ff ff ff ff 00 00 00 00 00 c9 ff ff  ................
    d0 9a 16 17 81 88 ff ff d0 9a 16 17 81 88 ff ff  ................
  backtrace:
    [<00000000351bb234>] kmalloc include/linux/slab.h:555 [inline]
    [<00000000351bb234>] do_eventfd+0x35/0xf0 fs/eventfd.c:418
    [<00000000c2f69a77>] __do_sys_eventfd fs/eventfd.c:443 [inline]
    [<00000000c2f69a77>] __se_sys_eventfd fs/eventfd.c:441 [inline]
    [<00000000c2f69a77>] __x64_sys_eventfd+0x14/0x20 fs/eventfd.c:441
    [<0000000086d6f989>] do_syscall_64+0x6e/0x220 arch/x86/entry/common.c:295
    [<000000006c5bcb63>] entry_SYSCALL_64_after_hwframe+0x44/0xa9

BUG: memory leak
unreferenced object 0xffff888117169100 (size 64):
  comm "syz-executor012", pid 6609, jiffies 4294942172 (age 13.720s)
  hex dump (first 32 bytes):
    e8 99 dd 00 00 c9 ff ff e8 99 dd 00 00 c9 ff ff  ................
    00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00  ... ............
  backtrace:
    [<00000000436d2955>] kmalloc include/linux/slab.h:555 [inline]
    [<00000000436d2955>] kzalloc include/linux/slab.h:669 [inline]
    [<00000000436d2955>] kvm_assign_ioeventfd_idx+0x4f/0x270 arch/x86/kvm/../../../virt/kvm/eventfd.c:798
    [<00000000e89390cc>] kvm_assign_ioeventfd arch/x86/kvm/../../../virt/kvm/eventfd.c:934 [inline]
    [<00000000e89390cc>] kvm_ioeventfd+0xbb/0x194 arch/x86/kvm/../../../virt/kvm/eventfd.c:961
    [<00000000ba9f6732>] kvm_vm_ioctl+0x1e6/0x1030 arch/x86/kvm/../../../virt/kvm/kvm_main.c:3670
    [<000000005da94937>] vfs_ioctl fs/ioctl.c:47 [inline]
    [<000000005da94937>] ksys_ioctl+0xa6/0xd0 fs/ioctl.c:771
    [<00000000a583d097>] __do_sys_ioctl fs/ioctl.c:780 [inline]
    [<00000000a583d097>] __se_sys_ioctl fs/ioctl.c:778 [inline]
    [<00000000a583d097>] __x64_sys_ioctl+0x1a/0x20 fs/ioctl.c:778
    [<0000000086d6f989>] do_syscall_64+0x6e/0x220 arch/x86/entry/common.c:295
    [<000000006c5bcb63>] entry_SYSCALL_64_after_hwframe+0x44/0xa9



---
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

* Re: memory leak in do_eventfd
  2020-05-21  1:12 memory leak in do_eventfd syzbot
@ 2020-06-05  4:24 ` Eric Biggers
  2020-08-07  7:04   ` Rustam Kovhaev
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Biggers @ 2020-06-05  4:24 UTC (permalink / raw)
  To: kvm; +Cc: syzbot, linux-fsdevel, linux-kernel, syzkaller-bugs, viro

[+Cc kvm mailing list]

On Wed, May 20, 2020 at 06:12:17PM -0700, syzbot wrote:
> Hello,
> 
> syzbot found the following crash on:
> 
> HEAD commit:    5a9ffb95 Merge tag '5.7-rc5-smb3-fixes' of git://git.samba..
> git tree:       upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=10b72a02100000
> kernel config:  https://syzkaller.appspot.com/x/.config?x=f8295ae5b3f8268d
> dashboard link: https://syzkaller.appspot.com/bug?extid=f196caa45793d6374707
> compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
> syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=17585b76100000
> C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=12500a02100000
> 
> IMPORTANT: if you fix the bug, please add the following tag to the commit:
> Reported-by: syzbot+f196caa45793d6374707@syzkaller.appspotmail.com
> 
> BUG: memory leak
> unreferenced object 0xffff888117169ac0 (size 64):
>   comm "syz-executor012", pid 6609, jiffies 4294942172 (age 13.720s)
>   hex dump (first 32 bytes):
>     01 00 00 00 ff ff ff ff 00 00 00 00 00 c9 ff ff  ................
>     d0 9a 16 17 81 88 ff ff d0 9a 16 17 81 88 ff ff  ................
>   backtrace:
>     [<00000000351bb234>] kmalloc include/linux/slab.h:555 [inline]
>     [<00000000351bb234>] do_eventfd+0x35/0xf0 fs/eventfd.c:418
>     [<00000000c2f69a77>] __do_sys_eventfd fs/eventfd.c:443 [inline]
>     [<00000000c2f69a77>] __se_sys_eventfd fs/eventfd.c:441 [inline]
>     [<00000000c2f69a77>] __x64_sys_eventfd+0x14/0x20 fs/eventfd.c:441
>     [<0000000086d6f989>] do_syscall_64+0x6e/0x220 arch/x86/entry/common.c:295
>     [<000000006c5bcb63>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
> 
> BUG: memory leak
> unreferenced object 0xffff888117169100 (size 64):
>   comm "syz-executor012", pid 6609, jiffies 4294942172 (age 13.720s)
>   hex dump (first 32 bytes):
>     e8 99 dd 00 00 c9 ff ff e8 99 dd 00 00 c9 ff ff  ................
>     00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00  ... ............
>   backtrace:
>     [<00000000436d2955>] kmalloc include/linux/slab.h:555 [inline]
>     [<00000000436d2955>] kzalloc include/linux/slab.h:669 [inline]
>     [<00000000436d2955>] kvm_assign_ioeventfd_idx+0x4f/0x270 arch/x86/kvm/../../../virt/kvm/eventfd.c:798
>     [<00000000e89390cc>] kvm_assign_ioeventfd arch/x86/kvm/../../../virt/kvm/eventfd.c:934 [inline]
>     [<00000000e89390cc>] kvm_ioeventfd+0xbb/0x194 arch/x86/kvm/../../../virt/kvm/eventfd.c:961
>     [<00000000ba9f6732>] kvm_vm_ioctl+0x1e6/0x1030 arch/x86/kvm/../../../virt/kvm/kvm_main.c:3670
>     [<000000005da94937>] vfs_ioctl fs/ioctl.c:47 [inline]
>     [<000000005da94937>] ksys_ioctl+0xa6/0xd0 fs/ioctl.c:771
>     [<00000000a583d097>] __do_sys_ioctl fs/ioctl.c:780 [inline]
>     [<00000000a583d097>] __se_sys_ioctl fs/ioctl.c:778 [inline]
>     [<00000000a583d097>] __x64_sys_ioctl+0x1a/0x20 fs/ioctl.c:778
>     [<0000000086d6f989>] do_syscall_64+0x6e/0x220 arch/x86/entry/common.c:295
>     [<000000006c5bcb63>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
> 
> 
> 
> ---
> 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
> 
> -- 
> You received this message because you are subscribed to the Google Groups "syzkaller-bugs" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to syzkaller-bugs+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/syzkaller-bugs/0000000000001daa8d05a61e3440%40google.com.

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

* Re: memory leak in do_eventfd
  2020-06-05  4:24 ` Eric Biggers
@ 2020-08-07  7:04   ` Rustam Kovhaev
  0 siblings, 0 replies; 3+ messages in thread
From: Rustam Kovhaev @ 2020-08-07  7:04 UTC (permalink / raw)
  To: kvm, ebiggers; +Cc: linux-fsdevel, linux-kernel, syzkaller-bugs, viro

On Thu, Jun 04, 2020 at 09:24:02PM -0700, Eric Biggers wrote:
> [+Cc kvm mailing list]
> 
> On Wed, May 20, 2020 at 06:12:17PM -0700, syzbot wrote:
> > Hello,
> > 
> > syzbot found the following crash on:
> > 
> > HEAD commit:    5a9ffb95 Merge tag '5.7-rc5-smb3-fixes' of git://git.samba..
> > git tree:       upstream
> > console output: https://syzkaller.appspot.com/x/log.txt?x=10b72a02100000
> > kernel config:  https://syzkaller.appspot.com/x/.config?x=f8295ae5b3f8268d
> > dashboard link: https://syzkaller.appspot.com/bug?extid=f196caa45793d6374707
> > compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
> > syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=17585b76100000
> > C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=12500a02100000
> > 
> > IMPORTANT: if you fix the bug, please add the following tag to the commit:
> > Reported-by: syzbot+f196caa45793d6374707@syzkaller.appspotmail.com
> > 
> > BUG: memory leak
> > unreferenced object 0xffff888117169ac0 (size 64):
> >   comm "syz-executor012", pid 6609, jiffies 4294942172 (age 13.720s)
> >   hex dump (first 32 bytes):
> >     01 00 00 00 ff ff ff ff 00 00 00 00 00 c9 ff ff  ................
> >     d0 9a 16 17 81 88 ff ff d0 9a 16 17 81 88 ff ff  ................
> >   backtrace:
> >     [<00000000351bb234>] kmalloc include/linux/slab.h:555 [inline]
> >     [<00000000351bb234>] do_eventfd+0x35/0xf0 fs/eventfd.c:418
> >     [<00000000c2f69a77>] __do_sys_eventfd fs/eventfd.c:443 [inline]
> >     [<00000000c2f69a77>] __se_sys_eventfd fs/eventfd.c:441 [inline]
> >     [<00000000c2f69a77>] __x64_sys_eventfd+0x14/0x20 fs/eventfd.c:441
> >     [<0000000086d6f989>] do_syscall_64+0x6e/0x220 arch/x86/entry/common.c:295
> >     [<000000006c5bcb63>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
> > 
> > BUG: memory leak
> > unreferenced object 0xffff888117169100 (size 64):
> >   comm "syz-executor012", pid 6609, jiffies 4294942172 (age 13.720s)
> >   hex dump (first 32 bytes):
> >     e8 99 dd 00 00 c9 ff ff e8 99 dd 00 00 c9 ff ff  ................
> >     00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00  ... ............
> >   backtrace:
> >     [<00000000436d2955>] kmalloc include/linux/slab.h:555 [inline]
> >     [<00000000436d2955>] kzalloc include/linux/slab.h:669 [inline]
> >     [<00000000436d2955>] kvm_assign_ioeventfd_idx+0x4f/0x270 arch/x86/kvm/../../../virt/kvm/eventfd.c:798
> >     [<00000000e89390cc>] kvm_assign_ioeventfd arch/x86/kvm/../../../virt/kvm/eventfd.c:934 [inline]
> >     [<00000000e89390cc>] kvm_ioeventfd+0xbb/0x194 arch/x86/kvm/../../../virt/kvm/eventfd.c:961
> >     [<00000000ba9f6732>] kvm_vm_ioctl+0x1e6/0x1030 arch/x86/kvm/../../../virt/kvm/kvm_main.c:3670
> >     [<000000005da94937>] vfs_ioctl fs/ioctl.c:47 [inline]
> >     [<000000005da94937>] ksys_ioctl+0xa6/0xd0 fs/ioctl.c:771
> >     [<00000000a583d097>] __do_sys_ioctl fs/ioctl.c:780 [inline]
> >     [<00000000a583d097>] __se_sys_ioctl fs/ioctl.c:778 [inline]
> >     [<00000000a583d097>] __x64_sys_ioctl+0x1a/0x20 fs/ioctl.c:778
> >     [<0000000086d6f989>] do_syscall_64+0x6e/0x220 arch/x86/entry/common.c:295
> >     [<000000006c5bcb63>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
> > 

i had to slightly change syzbot reproducer to reproduce this bug in my
lab:
	root@syzkaller:~# diff repro_fixed.c repro_syz.c
	371c371
	<   inject_fault(2);
	---
	>   inject_fault(4);

the memleak happens when kmalloc() fails in kvm_io_bus_unregister_dev()
i also confirmed the leak by running ftrace - eventfd_free_ctx() was
not executed when we got to kvm_vm_release()

it seems like we should call kvm_iodevice_destructor(), because there
could be other devices linked to the bus that's being removed when that
particular kmalloc() failure happens

i did not want to modify callers of kvm_io_bus_unregister_dev() and i
tested the patch below that fixed the leak, but i am not sure if it
completely breaks other things in KVM, i would really appreciate if
someone can review it:

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 0a68c9d3d3ab..b1996989d576 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -4268,7 +4268,7 @@ int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
 void kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
 			       struct kvm_io_device *dev)
 {
-	int i;
+	int i, j;
 	struct kvm_io_bus *new_bus, *bus;
 
 	bus = kvm_get_bus(kvm, bus_idx);
@@ -4298,6 +4298,13 @@ void kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
 broken:
 	rcu_assign_pointer(kvm->buses[bus_idx], new_bus);
 	synchronize_srcu_expedited(&kvm->srcu);
+	if (!new_bus) {
+		for (j = 0; j < bus->dev_count; j++) {
+			if (j == i)
+				continue;
+			kvm_iodevice_destructor(bus->range[j].dev);
+		}
+	}
 	kfree(bus);
 	return;
 }


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

end of thread, other threads:[~2020-08-07  7:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-21  1:12 memory leak in do_eventfd syzbot
2020-06-05  4:24 ` Eric Biggers
2020-08-07  7:04   ` Rustam Kovhaev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).