Re: memory leak in policydb_read

From: Dmitry Vyukov
Date: Tue Jul 23 2019 - 05:41:50 EST


On Tue, Jul 23, 2019 at 11:18 AM syzbot
<syzbot+fee3a14d4cdf92646287@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hello,
>
> syzbot found the following crash on:
>
> HEAD commit: c6dd78fc Merge branch 'x86-urgent-for-linus' of git://git...
> git tree: upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=1613751fa00000
> kernel config: https://syzkaller.appspot.com/x/.config?x=8de7d700ea5ac607
> dashboard link: https://syzkaller.appspot.com/bug?extid=fee3a14d4cdf92646287
> compiler: gcc (GCC) 9.0.0 20181231 (experimental)
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=15a7951fa00000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16206444600000
>
> The bug was bisected to:
>
> commit d9570ee3bd1d4f20ce63485f5ef05663866fe6c0
> Author: Dmitry Vyukov <dvyukov@xxxxxxxxxx>
> Date: Sat Jan 13 00:53:10 2018 +0000
>
> kmemleak: allow to coexist with fault injection


I suspect this is a bug in SELinux which become detectable after this
commit (introduced before). +selinux maintianters
Since fault injection is involved, most likely a typical missed kfree
on an error path.


> bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=1633cb00600000
> final crash: https://syzkaller.appspot.com/x/report.txt?x=1533cb00600000
> console output: https://syzkaller.appspot.com/x/log.txt?x=1133cb00600000
>
> IMPORTANT: if you fix the bug, please add the following tag to the commit:
> Reported-by: syzbot+fee3a14d4cdf92646287@xxxxxxxxxxxxxxxxxxxxxxxxx
> Fixes: d9570ee3bd1d ("kmemleak: allow to coexist with fault injection")
>
> BUG: memory leak
> unreferenced object 0xffff888123547c80 (size 64):
> comm "syz-executor647", pid 6976, jiffies 4294940919 (age 7.920s)
> 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 00 00 00 00 00 00 00 00 ................
> backtrace:
> [<0000000019b1b22a>] kmemleak_alloc_recursive
> /./include/linux/kmemleak.h:43 [inline]
> [<0000000019b1b22a>] slab_post_alloc_hook /mm/slab.h:522 [inline]
> [<0000000019b1b22a>] slab_alloc /mm/slab.c:3319 [inline]
> [<0000000019b1b22a>] kmem_cache_alloc_trace+0x145/0x280 /mm/slab.c:3548
> [<00000000d64c33c7>] kmalloc /./include/linux/slab.h:552 [inline]
> [<00000000d64c33c7>] kzalloc /./include/linux/slab.h:748 [inline]
> [<00000000d64c33c7>] roles_init /security/selinux/ss/policydb.c:188
> [inline]
> [<00000000d64c33c7>] policydb_init /security/selinux/ss/policydb.c:294
> [inline]
> [<00000000d64c33c7>] policydb_read+0x141/0x1b80
> /security/selinux/ss/policydb.c:2259
> [<000000004dd18ef6>] security_load_policy+0x182/0x740
> /security/selinux/ss/services.c:2141
> [<000000004f5bb277>] sel_write_load+0x101/0x1f0
> /security/selinux/selinuxfs.c:564
> [<00000000ee05c840>] __vfs_write+0x43/0xa0 /fs/read_write.c:494
> [<000000008ca23315>] vfs_write /fs/read_write.c:558 [inline]
> [<000000008ca23315>] vfs_write+0xee/0x210 /fs/read_write.c:542
> [<00000000d97bcbc9>] ksys_write+0x7c/0x130 /fs/read_write.c:611
> [<000000007a3f006b>] __do_sys_write /fs/read_write.c:623 [inline]
> [<000000007a3f006b>] __se_sys_write /fs/read_write.c:620 [inline]
> [<000000007a3f006b>] __x64_sys_write+0x1e/0x30 /fs/read_write.c:620
> [<000000001c16ef20>] do_syscall_64+0x76/0x1a0
> /arch/x86/entry/common.c:296
> [<000000007784189d>] 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@xxxxxxxxxxxxxxxxx
>
> syzbot will keep track of this bug report. See:
> https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
> For information about bisection process see: https://goo.gl/tpsmEJ#bisection
> syzbot can test patches for this bug, for details see:
> https://goo.gl/tpsmEJ#testing-patches