| From 173b8439e1ba362007315868928bf9d26e5cc5a6 Mon Sep 17 00:00:00 2001 |
| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Wed, 28 Dec 2016 00:22:52 -0500 |
| Subject: ext4: don't allow encrypted operations without keys |
| |
| From: Theodore Ts'o <tytso@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 <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/ext4/namei.c | 12 ++++++++++++ |
| 1 file changed, 12 insertions(+) |
| |
| --- a/fs/ext4/namei.c |
| +++ b/fs/ext4/namei.c |
| @@ -3527,6 +3527,12 @@ static int ext4_rename(struct inode *old |
| EXT4_I(old_dentry->d_inode)->i_projid))) |
| return -EXDEV; |
| |
| + if ((ext4_encrypted_inode(old_dir) && |
| + !fscrypt_has_encryption_key(old_dir)) || |
| + (ext4_encrypted_inode(new_dir) && |
| + !fscrypt_has_encryption_key(new_dir))) |
| + return -ENOKEY; |
| + |
| retval = dquot_initialize(old.dir); |
| if (retval) |
| return retval; |
| @@ -3726,6 +3732,12 @@ static int ext4_cross_rename(struct inod |
| u8 new_file_type; |
| int retval; |
| |
| + if ((ext4_encrypted_inode(old_dir) && |
| + !fscrypt_has_encryption_key(old_dir)) || |
| + (ext4_encrypted_inode(new_dir) && |
| + !fscrypt_has_encryption_key(new_dir))) |
| + return -ENOKEY; |
| + |
| if ((ext4_encrypted_inode(old_dir) || |
| ext4_encrypted_inode(new_dir)) && |
| (old_dir != new_dir) && |