[SRU][L/K/J/F/OEM-5.17/OEM-6.0/OEM-6.1][PATCH 1/1] UBUNTU: SAUCE: shiftfs: prevent lock unbalance in shiftfs_create_object()

Thadeu Lima de Souza Cascardo cascardo at canonical.com
Wed May 10 20:44:13 UTC 2023


From: Andrea Righi <andrea.righi at canonical.com>

Make sure to always acquire the inode lock of loweri_dir_iop when
accessing its methods.

This also prevents an lock unbalance when one of such methods is not
implemented.

Signed-off-by: Andrea Righi <andrea.righi at canonical.com>
CVE-2023-2612
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo at canonical.com>
---
 fs/shiftfs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/shiftfs.c b/fs/shiftfs.c
index 2664e1fb65d30..e777d9f685938 100644
--- a/fs/shiftfs.c
+++ b/fs/shiftfs.c
@@ -409,6 +409,8 @@ static int shiftfs_create_object(struct inode *diri, struct dentry *dentry,
 	const struct inode_operations *loweri_dir_iop = loweri_dir->i_op;
 	struct dentry *lowerd_link = NULL;
 
+	inode_lock_nested(loweri_dir, I_MUTEX_PARENT);
+
 	if (hardlink) {
 		loweri_iop_ptr = loweri_dir_iop->link;
 	} else {
@@ -434,8 +436,6 @@ static int shiftfs_create_object(struct inode *diri, struct dentry *dentry,
 		goto out_iput;
 	}
 
-	inode_lock_nested(loweri_dir, I_MUTEX_PARENT);
-
 	if (!hardlink) {
 		inode = new_inode(dir_sb);
 		if (!inode) {
-- 
2.39.2





More information about the kernel-team mailing list