Skip to content

Commit 42d0c4b

Browse files
sforsheebrauner
authored andcommitted
filelocks: use mount idmapping for setlease permission check
A user should be allowed to take out a lease via an idmapped mount if the fsuid matches the mapped uid of the inode. generic_setlease() is checking the unmapped inode uid, causing these operations to be denied. Fix this by comparing against the mapped inode uid instead of the unmapped uid. Fixes: 9caccd4 ("fs: introduce MOUNT_ATTR_IDMAP") Cc: stable@vger.kernel.org Signed-off-by: Seth Forshee (DigitalOcean) <sforshee@kernel.org> Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
1 parent dc59219 commit 42d0c4b

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

fs/locks.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1863,9 +1863,10 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp,
18631863
void **priv)
18641864
{
18651865
struct inode *inode = file_inode(filp);
1866+
vfsuid_t vfsuid = i_uid_into_vfsuid(file_mnt_idmap(filp), inode);
18661867
int error;
18671868

1868-
if ((!uid_eq(current_fsuid(), inode->i_uid)) && !capable(CAP_LEASE))
1869+
if ((!vfsuid_eq_kuid(vfsuid, current_fsuid())) && !capable(CAP_LEASE))
18691870
return -EACCES;
18701871
if (!S_ISREG(inode->i_mode))
18711872
return -EINVAL;

0 commit comments

Comments
 (0)