From 02202dedf577681bdd82691893719c24d26c5f0e Mon Sep 17 00:00:00 2001 From: Gaurav Kashyap Date: Thu, 28 May 2020 15:06:50 -0700 Subject: [PATCH] soc: qcom: crypto-qti-hwkm: Return negative errors Return negative errors on HWKM failures, so that KSM does not use the errors returned as slots. Change-Id: I43fa916ef56f79a1b1024d9311b4fdc9dfc24a11 Signed-off-by: Gaurav Kashyap --- drivers/soc/qcom/crypto-qti-hwkm.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/soc/qcom/crypto-qti-hwkm.c b/drivers/soc/qcom/crypto-qti-hwkm.c index c521ae81ea6b..6f42ab833686 100644 --- a/drivers/soc/qcom/crypto-qti-hwkm.c +++ b/drivers/soc/qcom/crypto-qti-hwkm.c @@ -98,7 +98,7 @@ int crypto_qti_program_key(struct crypto_vops_qti_entry *ice_entry, pr_err("%s: Error with HWKM init %d\n", __func__, err_program); qti_hwkm_clocks(false); - return err_program; + return -EINVAL; } ice_entry->flags |= QTI_HWKM_INIT_DONE; } @@ -109,7 +109,7 @@ int crypto_qti_program_key(struct crypto_vops_qti_entry *ice_entry, pr_err("%s: Error clearing ICE slot %d, err %d\n", __func__, GP_KEYSLOT, err_clear); qti_hwkm_clocks(false); - return err_clear; + return -EINVAL; } /* Unwrap keyblob into a non ICE slot using TP key */ @@ -124,7 +124,7 @@ int crypto_qti_program_key(struct crypto_vops_qti_entry *ice_entry, pr_err("%s: Error with key unwrap %d\n", __func__, err_program); qti_hwkm_clocks(false); - return err_program; + return -EINVAL; } //Failsafe, clear ICE keyslot incase it is not empty for any reason @@ -134,7 +134,7 @@ int crypto_qti_program_key(struct crypto_vops_qti_entry *ice_entry, pr_err("%s: Error clearing ICE slot %d, err %d\n", __func__, KEYMANAGER_ICE_MAP_SLOT(slot), err_clear); qti_hwkm_clocks(false); - return err_clear; + return -EINVAL; } /* Derive a 512-bit key which will be the key to encrypt/decrypt data */ @@ -158,15 +158,15 @@ int crypto_qti_program_key(struct crypto_vops_qti_entry *ice_entry, err_program = qti_hwkm_handle_cmd(&cmd_kdf, &rsp_kdf); if (err_program) { - pr_err("%s: Error programming key %d\n", __func__, - err_program); + pr_err("%s: Error programming key %d, slot %d\n", __func__, + err_program, slot); err_clear = crypto_qti_hwkm_evict_slot(GP_KEYSLOT, false); if (err_clear) { pr_err("%s: Error clearing slot %d err %d\n", __func__, GP_KEYSLOT, err_clear); } qti_hwkm_clocks(false); - return err_program; + return -EINVAL; } err_clear = crypto_qti_hwkm_evict_slot(GP_KEYSLOT, false); @@ -174,7 +174,7 @@ int crypto_qti_program_key(struct crypto_vops_qti_entry *ice_entry, pr_err("%s: Error unwrapped slot clear %d\n", __func__, err_clear); qti_hwkm_clocks(false); - return err_clear; + return -EINVAL; } ice_writel(ice_entry, cfg.regval[0], (ICE_LUT_KEYS_CRYPTOCFG_R_16 + @@ -201,8 +201,11 @@ int crypto_qti_invalidate_key(struct crypto_vops_qti_entry *ice_entry, /* Clear key from ICE keyslot */ err = crypto_qti_hwkm_evict_slot(KEYMANAGER_ICE_MAP_SLOT(slot), true); - if (err) - pr_err("%s: Error with key clear %d\n", __func__, err); + if (err) { + pr_err("%s: Error with key clear %d, slot %d\n", + __func__, err, slot); + err = -EINVAL; + } qti_hwkm_clocks(false);