Re: [syzbot] [kernfs?] possible deadlock in kernfs_fop_llseek

From: Amir Goldstein
Date: Sat Apr 06 2024 - 01:34:24 EST


On Fri, Apr 5, 2024 at 7:23 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote:
>
> On Fri, Apr 05, 2024 at 08:37:03AM -0700, syzbot wrote:
> > Hello,
> >
> > syzbot tried to test the proposed patch but the build/boot failed:
>
> WTF? The patch is
>
> diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
> index e9df2f87072c6..8502ef68459b9 100644
> --- a/fs/kernfs/file.c
> +++ b/fs/kernfs/file.c
> @@ -636,11 +636,18 @@ static int kernfs_fop_open(struct inode *inode, struct file *file)
> * each file a separate locking class. Let's differentiate on
> * whether the file has mmap or not for now.
> *
> - * Both paths of the branch look the same. They're supposed to
> + * For similar reasons, writable and readonly files are given different
> + * lockdep key, because the writable file /sys/power/resume may call vfs
> + * lookup helpers for arbitrary paths and readonly files can be read by
> + * overlayfs from vfs helpers when sysfs is a lower layer of overalyfs.
> + *
> + * All three cases look the same. They're supposed to
> * look that way and give @of->mutex different static lockdep keys.
> */
> if (has_mmap)
> mutex_init(&of->mutex);
> + else if (file->f_mode & FMODE_WRITE)
> + mutex_init(&of->mutex);
> else
> mutex_init(&of->mutex);
>
> How could it possibly trigger boot failure? Test the parent, perhaps?

Let's try again, rebased on current master:

#syz test: https://github.com/amir73il/linux/ vfs-fixes

Thanks,
Amir.