ext4 crypto: inherit encryption policies on inode and directory create

Signed-off-by: Michael Halcrow <mhalcrow@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
Michael Halcrow 2015-04-12 00:55:09 -04:00 committed by Theodore Ts'o
parent d9cdc90331
commit dde680cefc

View File

@ -2253,7 +2253,19 @@ static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode,
else
inode->i_fop = &ext4_file_operations;
ext4_set_aops(inode);
err = ext4_add_nondir(handle, dentry, inode);
err = 0;
#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (!err && ext4_encrypted_inode(dir)) {
err = ext4_inherit_context(dir, inode);
if (err) {
clear_nlink(inode);
unlock_new_inode(inode);
iput(inode);
}
}
#endif
if (!err)
err = ext4_add_nondir(handle, dentry, inode);
if (!err && IS_DIRSYNC(dir))
ext4_handle_sync(handle);
}
@ -2437,6 +2449,13 @@ static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
err = ext4_init_new_dir(handle, dir, inode);
if (err)
goto out_clear_inode;
#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (ext4_encrypted_inode(dir)) {
err = ext4_inherit_context(dir, inode);
if (err)
goto out_clear_inode;
}
#endif
err = ext4_mark_inode_dirty(handle, inode);
if (!err)
err = ext4_add_entry(handle, dentry, inode);