diff options
Diffstat (limited to 'queue-6.8/kernfs-annotate-different-lockdep-class-for-of-mutex-of-writable-files.patch')
-rw-r--r-- | queue-6.8/kernfs-annotate-different-lockdep-class-for-of-mutex-of-writable-files.patch | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/queue-6.8/kernfs-annotate-different-lockdep-class-for-of-mutex-of-writable-files.patch b/queue-6.8/kernfs-annotate-different-lockdep-class-for-of-mutex-of-writable-files.patch new file mode 100644 index 0000000000..c1b25aad23 --- /dev/null +++ b/queue-6.8/kernfs-annotate-different-lockdep-class-for-of-mutex-of-writable-files.patch @@ -0,0 +1,49 @@ +From 16b52bbee4823b01ab7fe3919373c981a38f3797 Mon Sep 17 00:00:00 2001 +From: Amir Goldstein <amir73il@gmail.com> +Date: Fri, 5 Apr 2024 17:56:35 +0300 +Subject: kernfs: annotate different lockdep class for of->mutex of writable files + +From: Amir Goldstein <amir73il@gmail.com> + +commit 16b52bbee4823b01ab7fe3919373c981a38f3797 upstream. + +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. + +To avoid a lockdep warning of circular dependency between overlayfs +inode lock and kernfs of->mutex, use a different lockdep class for +writable and readonly kernfs files. + +Reported-by: syzbot+9a5b0ced8b1bfb238b56@syzkaller.appspotmail.com +Fixes: 0fedefd4c4e3 ("kernfs: sysfs: support custom llseek method for sysfs entries") +Suggested-by: Al Viro <viro@zeniv.linux.org.uk> +Signed-off-by: Amir Goldstein <amir73il@gmail.com> +Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +--- + fs/kernfs/file.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +--- a/fs/kernfs/file.c ++++ b/fs/kernfs/file.c +@@ -634,11 +634,18 @@ static int kernfs_fop_open(struct inode + * 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); + |