4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Theodore Ts'o <ty...@mit.edu>

commit 173b8439e1ba362007315868928bf9d26e5cc5a6 upstream.

While we allow deletes without the key, the following should not be
permitted:

# cd /vdc/encrypted-dir-without-key
# ls -l
total 4
-rw-r--r-- 1 root root   0 Dec 27 22:35 6,LKNRJsp209FbXoSvJWzB
-rw-r--r-- 1 root root 286 Dec 27 22:35 uRJ5vJh9gE7vcomYMqTAyD
# mv uRJ5vJh9gE7vcomYMqTAyD  6,LKNRJsp209FbXoSvJWzB

Signed-off-by: Theodore Ts'o <ty...@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>


---
 fs/ext4/namei.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -3506,6 +3506,12 @@ static int ext4_rename(struct inode *old
        int credits;
        u8 old_file_type;
 
+       if ((ext4_encrypted_inode(old_dir) &&
+            !ext4_has_encryption_key(old_dir)) ||
+           (ext4_encrypted_inode(new_dir) &&
+            !ext4_has_encryption_key(new_dir)))
+               return -ENOKEY;
+
        retval = dquot_initialize(old.dir);
        if (retval)
                return retval;
@@ -3706,6 +3712,12 @@ static int ext4_cross_rename(struct inod
        u8 new_file_type;
        int retval;
 
+       if ((ext4_encrypted_inode(old_dir) &&
+            !ext4_has_encryption_key(old_dir)) ||
+           (ext4_encrypted_inode(new_dir) &&
+            !ext4_has_encryption_key(new_dir)))
+               return -ENOKEY;
+
        if ((ext4_encrypted_inode(old_dir) ||
             ext4_encrypted_inode(new_dir)) &&
            (old_dir != new_dir) &&


Reply via email to