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 | |
| 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>
| -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); |
