From c36ce7e9276a8ff22538057b3e1a5ed01ef874f4 Mon Sep 17 00:00:00 2001 From: Boojin Kim Date: Fri, 15 Feb 2019 13:51:42 +0900 Subject: [PATCH] [RAMEN9610-12196] crypto: check the validation of crypto pointer This patch checkes the validation of crypto pointer before puting it. Change-Id: If016ae6108cb59d3cdf9c010340f022845a744a0 Signed-off-by: Boojin Kim --- fs/crypto/keyinfo.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/fs/crypto/keyinfo.c b/fs/crypto/keyinfo.c index 07af20f50f79..e689d25f41f7 100644 --- a/fs/crypto/keyinfo.c +++ b/fs/crypto/keyinfo.c @@ -159,11 +159,22 @@ static void put_crypt_info(struct fscrypt_info *ci) return; #if defined(CONFIG_CRYPTO_DISKCIPHER) - if (ci->ci_dtfm) + if ((ci->ci_dtfm && ci->ci_ctfm) || (ci->ci_dtfm && !virt_addr_valid(ci->ci_dtfm)) || + (ci->ci_ctfm && !virt_addr_valid(ci->ci_ctfm)) || + (ci->ci_essiv_tfm && !virt_addr_valid(ci->ci_essiv_tfm))) + pr_warn("fscrypto: mode:d:%d,f:%d, dt:%p(%d), ct:%p(%d), ess:%p(%d)\n", + ci->ci_data_mode, ci->ci_filename_mode, + ci->ci_dtfm, virt_addr_valid(ci->ci_dtfm), + ci->ci_ctfm, virt_addr_valid(ci->ci_ctfm), + ci->ci_essiv_tfm, virt_addr_valid(ci->ci_essiv_tfm)); + + if (ci->ci_dtfm && virt_addr_valid(ci->ci_dtfm)) crypto_free_req_diskcipher(ci->ci_dtfm); #endif - crypto_free_skcipher(ci->ci_ctfm); - crypto_free_cipher(ci->ci_essiv_tfm); + if (ci->ci_ctfm && virt_addr_valid(ci->ci_ctfm)) + crypto_free_skcipher(ci->ci_ctfm); + if (ci->ci_essiv_tfm && virt_addr_valid(ci->ci_essiv_tfm)) + crypto_free_cipher(ci->ci_essiv_tfm); kmem_cache_free(fscrypt_info_cachep, ci); } -- 2.20.1