Skip to content

Commit

Permalink
fscrypto: lock inode while setting encryption policy
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Eric Biggers authored and Theodore Ts'o committed Oct 15, 2016
1 parent 1996250 commit 8906a82
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions fs/crypto/policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ int fscrypt_process_policy(struct file *filp,
if (ret)
return ret;

inode_lock(inode);

if (!inode_has_encryption_context(inode)) {
if (!S_ISDIR(inode->i_mode))
ret = -EINVAL;
Expand All @@ -127,6 +129,8 @@ int fscrypt_process_policy(struct file *filp,
ret = -EINVAL;
}

inode_unlock(inode);

mnt_drop_write_file(filp);
return ret;
}
Expand Down

0 comments on commit 8906a82

Please sign in to comment.