Skip to contentSkip to conversation

FAILED: patch "[PATCH] filelocks: use mount idmapping for setlease permission check" failed to apply to 6.2-stable tree

PATCH In review [email protected] 2 participants 3 messages Mar 13, 2023 – Mar 15, 2023

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 6.2-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

To reproduce the conflict and resubmit, you may use the following commands:

git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.2.y
git checkout FETCH_HEAD
git cherry-pick -x 42d0c4bdf753063b6eec55415003184d3ca24f6e
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '[email protected]' --subject-prefix 'PATCH 6.2.y' HEAD^..

Possible dependencies:

42d0c4bdf753 ("filelocks: use mount idmapping for setlease permission check") c65454a94726 ("fs: remove locks_inode")
5970e15dbcfe ("filelock: move file locking definitions to separate header file")

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 42d0c4bdf753063b6eec55415003184d3ca24f6e Mon Sep 17 00:00:00 2001
From: Seth Forshee <[email protected]>
Date: Thu, 9 Mar 2023 14:39:09 -0600
Subject: [PATCH] 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 9caccd41541a ("fs: introduce MOUNT_ATTR_IDMAP")
fs/locks.c +2 -1
index d82c4cacdfb9..df8b26a42524 100644
@@ -1863,9 +1863,10 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp,
 			void **priv)
 {
 	struct inode *inode = file_inode(filp);
+	vfsuid_t vfsuid = i_uid_into_vfsuid(file_mnt_idmap(filp), inode);
 	int error;
 
-	if ((!uid_eq(current_fsuid(), inode->i_uid)) && !capable(CAP_LEASE))
+	if ((!vfsuid_eq_kuid(vfsuid, current_fsuid())) && !capable(CAP_LEASE))
 		return -EACCES;
 	if (!S_ISREG(inode->i_mode))
 		return -EINVAL;
#1 lore raw

PATCH 1/1 filelocks: use mount idmapping for setlease permission check

From: Seth Forshee <[email protected]>

[ Upstream commit 42d0c4bdf753063b6eec55415003184d3ca24f6e ]

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 9caccd41541a ("fs: introduce MOUNT_ATTR_IDMAP")
---
 fs/locks.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
fs/locks.c +2 -1
index 8f01bee17715..8a881cda3dd2 100644
@@ -1862,9 +1862,10 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp,
 			void **priv)
 {
 	struct inode *inode = locks_inode(filp);
+	vfsuid_t vfsuid = i_uid_into_vfsuid(file_mnt_user_ns(filp), inode);
 	int error;
 
-	if ((!uid_eq(current_fsuid(), inode->i_uid)) && !capable(CAP_LEASE))
+	if ((!vfsuid_eq_kuid(vfsuid, current_fsuid())) && !capable(CAP_LEASE))
 		return -EACCES;
 	if (!S_ISREG(inode->i_mode))
 		return -EINVAL;
Signature · 1 line
2.39.1
author maintainer
#2 lore raw

Re: [PATCH 6.2] filelocks: use mount idmapping for setlease permission check

Quoted 11 lines · Seth Forshee (DigitalOcean)

From: Seth Forshee <[email protected]>

[ Upstream commit 42d0c4bdf753063b6eec55415003184d3ca24f6e ]

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.

Quoted 7 lines
Fixes 9caccd41541a ("fs: introduce MOUNT_ATTR_IDMAP")
---
 fs/locks.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Now queued up, thanks.

greg k-h