Skip to content

Commit 531d304

Browse files
amir73ilMiklos Szeredi
authored andcommitted
ovl: fix lock in ovl_llseek()
ovl_inode_lock() is interruptible. When inode_lock() in ovl_llseek() was replaced with ovl_inode_lock(), we did not add a check for error. Fix this by making ovl_inode_lock() uninterruptible and change the existing call sites to use an _interruptible variant. Reported-by: syzbot+66a9752fa927f745385e@syzkaller.appspotmail.com Fixes: b1f9d38 ("ovl: use ovl_inode_lock in ovl_llseek()") Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
1 parent 11a48a5 commit 531d304

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

fs/overlayfs/overlayfs.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,12 @@ static inline unsigned int ovl_xino_bits(struct super_block *sb)
318318
return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0;
319319
}
320320

321-
static inline int ovl_inode_lock(struct inode *inode)
321+
static inline void ovl_inode_lock(struct inode *inode)
322+
{
323+
mutex_lock(&OVL_I(inode)->lock);
324+
}
325+
326+
static inline int ovl_inode_lock_interruptible(struct inode *inode)
322327
{
323328
return mutex_lock_interruptible(&OVL_I(inode)->lock);
324329
}

fs/overlayfs/util.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ int ovl_copy_up_start(struct dentry *dentry, int flags)
509509
struct inode *inode = d_inode(dentry);
510510
int err;
511511

512-
err = ovl_inode_lock(inode);
512+
err = ovl_inode_lock_interruptible(inode);
513513
if (!err && ovl_already_copied_up_locked(dentry, flags)) {
514514
err = 1; /* Already copied up */
515515
ovl_inode_unlock(inode);
@@ -764,7 +764,7 @@ int ovl_nlink_start(struct dentry *dentry)
764764
return err;
765765
}
766766

767-
err = ovl_inode_lock(inode);
767+
err = ovl_inode_lock_interruptible(inode);
768768
if (err)
769769
return err;
770770

0 commit comments

Comments
 (0)