Re: [syzbot] WARNING in register_shrinker_prepared
From: Eric Biggers
Date: Mon Jun 06 2022 - 17:34:44 EST
On Mon, Jun 06, 2022 at 12:23:02PM -0700, Andrew Morton wrote:
> (cc Roman)
>
> On Mon, 06 Jun 2022 10:17:34 -0700 syzbot <syzbot+300d27c79fe6d4cbcc39@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> > Hello,
> >
> > syzbot found the following issue on:
> >
> > HEAD commit: 1cfd968b58a1 Add linux-next specific files for 20220603
> > git tree: linux-next
> > console+strace: https://syzkaller.appspot.com/x/log.txt?x=12f7b6b3f00000
> > kernel config: https://syzkaller.appspot.com/x/.config?x=7da8386e3742814f
> > dashboard link: https://syzkaller.appspot.com/bug?extid=300d27c79fe6d4cbcc39
> > compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2
> > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=103e5177f00000
> > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=13545057f00000
> >
> > IMPORTANT: if you fix the issue, please add the following tag to the commit:
> > Reported-by: syzbot+300d27c79fe6d4cbcc39@xxxxxxxxxxxxxxxxxxxxxxxxx
> >
> > loop0: detected capacity change from 0 to 20
> > ------------[ cut here ]------------
> > WARNING: CPU: 0 PID: 3694 at mm/vmscan.c:681 register_shrinker_prepared+0x119/0x150 mm/vmscan.c:681
>
> That's
>
> WARN_ON_ONCE(shrinker_debugfs_add(shrinker));
>
> I assume that debugfs_create_dir() failed. Please see the NOTE: in
> that function's kerneldoc.
>
The call to ida_alloc() can fail too.
register_shrinker_prepared() is not allowed to fail; anything that can fail must
happen in prealloc_shrinker(). So either this new debugfs registration code
needs to be moved to prealloc_shrinker(), or errors from it need to be ignored
(which might be appropriate since it is just debugfs).
- Eric