diff options
author | Michael Halcrow <mhalcrow@google.com> | 2015-04-12 00:55:09 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2015-04-12 00:55:09 -0400 |
commit | dde680cefc842e58524772099a3b8219e5abf551 (patch) | |
tree | 72d0983526c7797f69dd10daf601ac822c2b8779 /fs/ext4 | |
parent | d9cdc903318171571f1cd1e5737fd0cab94186be (diff) |
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>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/namei.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index acd79198b800..77a63ff4aeb9 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -2253,7 +2253,19 @@ retry: | |||
2253 | else | 2253 | else |
2254 | inode->i_fop = &ext4_file_operations; | 2254 | inode->i_fop = &ext4_file_operations; |
2255 | ext4_set_aops(inode); | 2255 | ext4_set_aops(inode); |
2256 | err = ext4_add_nondir(handle, dentry, inode); | 2256 | err = 0; |
2257 | #ifdef CONFIG_EXT4_FS_ENCRYPTION | ||
2258 | if (!err && ext4_encrypted_inode(dir)) { | ||
2259 | err = ext4_inherit_context(dir, inode); | ||
2260 | if (err) { | ||
2261 | clear_nlink(inode); | ||
2262 | unlock_new_inode(inode); | ||
2263 | iput(inode); | ||
2264 | } | ||
2265 | } | ||
2266 | #endif | ||
2267 | if (!err) | ||
2268 | err = ext4_add_nondir(handle, dentry, inode); | ||
2257 | if (!err && IS_DIRSYNC(dir)) | 2269 | if (!err && IS_DIRSYNC(dir)) |
2258 | ext4_handle_sync(handle); | 2270 | ext4_handle_sync(handle); |
2259 | } | 2271 | } |
@@ -2437,6 +2449,13 @@ retry: | |||
2437 | err = ext4_init_new_dir(handle, dir, inode); | 2449 | err = ext4_init_new_dir(handle, dir, inode); |
2438 | if (err) | 2450 | if (err) |
2439 | goto out_clear_inode; | 2451 | goto out_clear_inode; |
2452 | #ifdef CONFIG_EXT4_FS_ENCRYPTION | ||
2453 | if (ext4_encrypted_inode(dir)) { | ||
2454 | err = ext4_inherit_context(dir, inode); | ||
2455 | if (err) | ||
2456 | goto out_clear_inode; | ||
2457 | } | ||
2458 | #endif | ||
2440 | err = ext4_mark_inode_dirty(handle, inode); | 2459 | err = ext4_mark_inode_dirty(handle, inode); |
2441 | if (!err) | 2460 | if (!err) |
2442 | err = ext4_add_entry(handle, dentry, inode); | 2461 | err = ext4_add_entry(handle, dentry, inode); |