]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ovl: use I_MUTEX_PARENT when locking parent in ovl_create_temp()
authorNeilBrown <neil@brown.name>
Mon, 4 Aug 2025 12:11:28 +0000 (22:11 +1000)
committerAmir Goldstein <amir73il@gmail.com>
Mon, 18 Aug 2025 11:16:38 +0000 (13:16 +0200)
ovl_create_temp() treats "workdir" as a parent in which it creates an
object so it should use I_MUTEX_PARENT.

Prior to the commit identified below the lock was taken by the caller
which sometimes used I_MUTEX_PARENT and sometimes used I_MUTEX_NORMAL.
The use of I_MUTEX_NORMAL was incorrect but unfortunately copied into
ovl_create_temp().

Note to backporters: This patch only applies after the last Fixes given
below (post v6.16).  To fix the bug in v6.7 and later the
inode_lock() call in ovl_copy_up_workdir() needs to nest using
I_MUTEX_PARENT.

Link: https://lore.kernel.org/all/67a72070.050a0220.3d72c.0022.GAE@google.com/
Cc: stable@vger.kernel.org
Reported-by: syzbot+7836a68852a10ec3d790@syzkaller.appspotmail.com
Tested-by: syzbot+7836a68852a10ec3d790@syzkaller.appspotmail.com
Fixes: c63e56a4a652 ("ovl: do not open/llseek lower file with upper sb_writers held")
Fixes: d2c995581c7c ("ovl: Call ovl_create_temp() without lock held.")
Signed-off-by: NeilBrown <neil@brown.name>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
fs/overlayfs/dir.c

index 70b8687dc45e8e33079c865ae302ac58464224a6..dbd63a74df4b1c87b70f29115dcb881f7a74d11b 100644 (file)
@@ -225,7 +225,7 @@ struct dentry *ovl_create_temp(struct ovl_fs *ofs, struct dentry *workdir,
                               struct ovl_cattr *attr)
 {
        struct dentry *ret;
-       inode_lock(workdir->d_inode);
+       inode_lock_nested(workdir->d_inode, I_MUTEX_PARENT);
        ret = ovl_create_real(ofs, workdir,
                              ovl_lookup_temp(ofs, workdir), attr);
        inode_unlock(workdir->d_inode);