]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ovl: set I_CREATING on inode being created
authorMiklos Szeredi <miklos@szeredi.hu>
Wed, 22 Aug 2018 08:55:22 +0000 (10:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Oct 2018 06:56:04 +0000 (08:56 +0200)
commit 6faf05c2b2b4fe70d9068067437649401531de0a upstream.

...otherwise there will be list corruption due to inode_sb_list_add() being
called for inode already on the sb list.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: e950564b97fd ("vfs: don't evict uninitialized inode")
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
To: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/overlayfs/dir.c

index f480b1a2cd2e5ada2a7a3c978b00d541839b635a..da9b3ccfde23555614d0056b100e707f7e021a8b 100644 (file)
@@ -601,6 +601,10 @@ static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev,
        if (!inode)
                goto out_drop_write;
 
+       spin_lock(&inode->i_lock);
+       inode->i_state |= I_CREATING;
+       spin_unlock(&inode->i_lock);
+
        inode_init_owner(inode, dentry->d_parent->d_inode, mode);
        attr.mode = inode->i_mode;