Clean up whitespace and fixed a bug in the context inheritance error path
[ext4-patch-queue.git] / inherit-encryption-policies-on-inode-and-directory-create
blob7affb5b68753289281e8b6abbc8d8a4a2636ee6e
1 ext4 crypto: inherit encryption policies on inode and directory create
3 From: Michael Halcrow <mhalcrow@google.com>
5 Signed-off-by: Michael Halcrow <mhalcrow@google.com>
6 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
7 ---
8  fs/ext4/namei.c | 21 ++++++++++++++++++++-
9  1 file changed, 20 insertions(+), 1 deletion(-)
11 diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
12 index 9939db9..4712590 100644
13 --- a/fs/ext4/namei.c
14 +++ b/fs/ext4/namei.c
15 @@ -2249,7 +2249,19 @@ retry:
16                 inode->i_op = &ext4_file_inode_operations;
17                 inode->i_fop = &ext4_file_operations;
18                 ext4_set_aops(inode);
19 -               err = ext4_add_nondir(handle, dentry, inode);
20 +               err = 0;
21 +#ifdef CONFIG_EXT4_FS_ENCRYPTION
22 +               if (!err && ext4_encrypted_inode(dir)) {
23 +                       err = ext4_inherit_context(dir, inode);
24 +                       if (err) {
25 +                               clear_nlink(inode);
26 +                               unlock_new_inode(inode);
27 +                               iput(inode);
28 +                       }
29 +               }
30 +#endif
31 +               if (!err)
32 +                       err = ext4_add_nondir(handle, dentry, inode);
33                 if (!err && IS_DIRSYNC(dir))
34                         ext4_handle_sync(handle);
35         }
36 @@ -2430,6 +2442,13 @@ retry:
37         err = ext4_init_new_dir(handle, dir, inode);
38         if (err)
39                 goto out_clear_inode;
40 +#ifdef CONFIG_EXT4_FS_ENCRYPTION
41 +       if (ext4_encrypted_inode(dir)) {
42 +               err = ext4_inherit_context(dir, inode);
43 +               if (err)
44 +                       goto out_clear_inode;
45 +       }
46 +#endif
47         err = ext4_mark_inode_dirty(handle, inode);
48         if (!err)
49                 err = ext4_add_entry(handle, dentry, inode);