Skip to content

Commit 8906a82

Browse files
ebiggerstytso
authored andcommitted
fscrypto: lock inode while setting encryption policy
i_rwsem needs to be acquired while setting an encryption policy so that concurrent calls to FS_IOC_SET_ENCRYPTION_POLICY are correctly serialized (especially the ->get_context() + ->set_context() pair), and so that new files cannot be created in the directory during or after the ->empty_dir() check. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Richard Weinberger <richard@nod.at> Cc: stable@vger.kernel.org
1 parent 1996250 commit 8906a82

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

fs/crypto/policy.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ int fscrypt_process_policy(struct file *filp,
109109
if (ret)
110110
return ret;
111111

112+
inode_lock(inode);
113+
112114
if (!inode_has_encryption_context(inode)) {
113115
if (!S_ISDIR(inode->i_mode))
114116
ret = -EINVAL;
@@ -127,6 +129,8 @@ int fscrypt_process_policy(struct file *filp,
127129
ret = -EINVAL;
128130
}
129131

132+
inode_unlock(inode);
133+
130134
mnt_drop_write_file(filp);
131135
return ret;
132136
}

0 commit comments

Comments
 (0)