From 0079e1299a4923070b0ff6026389e217357757e1 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 11 Jul 2019 19:09:44 +0200 Subject: [PATCH] 4.4-stable patches added patches: fscrypt-don-t-set-policy-for-a-dead-directory.patch --- ...on-t-set-policy-for-a-dead-directory.patch | 53 +++++++++++++++++++ queue-4.4/series | 1 + 2 files changed, 54 insertions(+) create mode 100644 queue-4.4/fscrypt-don-t-set-policy-for-a-dead-directory.patch 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 index 00000000000..cadd344b8d6 --- /dev/null +++ b/queue-4.4/fscrypt-don-t-set-policy-for-a-dead-directory.patch @@ -0,0 +1,53 @@ +From 5858bdad4d0d0fc18bf29f34c3ac836e0b59441f Mon Sep 17 00:00:00 2001 +From: Hongjie Fang +Date: Wed, 22 May 2019 10:02:53 +0800 +Subject: fscrypt: don't set policy for a dead directory + +From: Hongjie Fang + +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: # v4.1+ +Signed-off-by: Hongjie Fang +Signed-off-by: Eric Biggers +Signed-off-by: Greg Kroah-Hartman + + +--- + 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, diff --git a/queue-4.4/series b/queue-4.4/series index 611370c5058..d9b65a8f2e1 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -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 -- 2.47.3