]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Jul 2019 17:09:44 +0000 (19:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Jul 2019 17:09:44 +0000 (19:09 +0200)
added patches:
fscrypt-don-t-set-policy-for-a-dead-directory.patch

queue-4.4/fscrypt-don-t-set-policy-for-a-dead-directory.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/fscrypt-don-t-set-policy-for-a-dead-directory.patch b/queue-4.4/fscrypt-don-t-set-policy-for-a-dead-directory.patch
new file mode 100644 (file)
index 0000000..cadd344
--- /dev/null
@@ -0,0 +1,53 @@
+From 5858bdad4d0d0fc18bf29f34c3ac836e0b59441f Mon Sep 17 00:00:00 2001
+From: Hongjie Fang <hongjiefang@asrmicro.com>
+Date: Wed, 22 May 2019 10:02:53 +0800
+Subject: fscrypt: don't set policy for a dead directory
+
+From: Hongjie Fang <hongjiefang@asrmicro.com>
+
+commit 5858bdad4d0d0fc18bf29f34c3ac836e0b59441f upstream.
+
+The directory may have been removed when entering
+fscrypt_ioctl_set_policy().  If so, the empty_dir() check will return
+error for ext4 file system.
+
+ext4_rmdir() sets i_size = 0, then ext4_empty_dir() reports an error
+because 'inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)'.  If
+the fs is mounted with errors=panic, it will trigger a panic issue.
+
+Add the check IS_DEADDIR() to fix this problem.
+
+Fixes: 9bd8212f981e ("ext4 crypto: add encryption policy and password salt support")
+Cc: <stable@vger.kernel.org> # v4.1+
+Signed-off-by: Hongjie Fang <hongjiefang@asrmicro.com>
+Signed-off-by: Eric Biggers <ebiggers@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ fs/ext4/crypto_policy.c |    2 ++
+ fs/f2fs/crypto_policy.c |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/fs/ext4/crypto_policy.c
++++ b/fs/ext4/crypto_policy.c
+@@ -111,6 +111,8 @@ int ext4_process_policy(const struct ext
+       if (!ext4_inode_has_encryption_context(inode)) {
+               if (!S_ISDIR(inode->i_mode))
+                       return -EINVAL;
++              if (IS_DEADDIR(inode))
++                      return -ENOENT;
+               if (!ext4_empty_dir(inode))
+                       return -ENOTEMPTY;
+               return ext4_create_encryption_context_from_policy(inode,
+--- a/fs/f2fs/crypto_policy.c
++++ b/fs/f2fs/crypto_policy.c
+@@ -99,6 +99,8 @@ int f2fs_process_policy(const struct f2f
+               return -EINVAL;
+       if (!f2fs_inode_has_encryption_context(inode)) {
++              if (IS_DEADDIR(inode))
++                      return -ENOENT;
+               if (!f2fs_empty_dir(inode))
+                       return -ENOTEMPTY;
+               return f2fs_create_encryption_context_from_policy(inode,
index 611370c5058edc6de961e495e69ff53dd1b9c167..d9b65a8f2e112de3e179871be5f956b22a8d7758 100644 (file)
@@ -14,3 +14,4 @@ x86-ptrace-fix-possible-spectre-v1-in-ptrace_get_debugreg.patch
 x86-tls-fix-possible-spectre-v1-in-do_get_thread_area.patch
 mwifiex-abort-at-too-short-bss-descriptor-element.patch
 mwifiex-fix-heap-overflow-in-mwifiex_uap_parse_tail_ies.patch
+fscrypt-don-t-set-policy-for-a-dead-directory.patch