diff options
| author | Komal Seelam <kseelam@qti.qualcomm.com> | 2014-09-13 23:13:02 +0530 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2014-09-18 19:23:49 +0530 |
| commit | 31aafbb7c91cf06729c550dd2a36ae542faecaf4 (patch) | |
| tree | d8060b0ed5d5daa18fa9ad9d6eeb94094062ed7b | |
| parent | be2631e8f0919eee1b31ff66ed7517ea26e33076 (diff) | |
qcacld: Compute Secure Firmware Hash
Wifi ON/OFF failed due to hash mismatch.
Crypto API's need memory to be in CMA
Allocate Memory in Platform Driver and use it
to compute the hash
Change-Id: I41b8f414e0764a2556ada0ea1df2c1f6eadc06db
CRs-Fixed: 717910
| -rw-r--r-- | CORE/SERVICES/BMI/ol_fw.c | 27 | ||||
| -rw-r--r-- | Kbuild | 5 |
2 files changed, 15 insertions, 17 deletions
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c index ea48d87119bb..1c4139781b59 100644 --- a/CORE/SERVICES/BMI/ol_fw.c +++ b/CORE/SERVICES/BMI/ol_fw.c @@ -57,9 +57,6 @@ #include "qwlan_version.h" #ifdef FEATURE_SECURE_FIRMWARE -#define MAX_FIRMWARE_SIZE (1*1024*1024) - -static u8 fw_mem[MAX_FIRMWARE_SIZE]; static struct hash_fw fw_hash; #endif @@ -366,8 +363,9 @@ exit: } #ifdef FEATURE_SECURE_FIRMWARE -static int ol_check_fw_hash(const u8* data, u32 data_size, ATH_BIN_FILE file) +static int ol_check_fw_hash(const u8* data, u32 fw_size, ATH_BIN_FILE file) { + u8 *fw_mem = NULL; u8 *hash = NULL; #ifdef CONFIG_CNSS u8 digest[SHA256_DIGEST_SIZE]; @@ -404,8 +402,18 @@ static int ol_check_fw_hash(const u8* data, u32 data_size, ATH_BIN_FILE file) goto end; } + fw_mem = (u8 *)cnss_get_fw_ptr(); + + if (!fw_mem || (fw_size > MAX_FIRMWARE_SIZE)) { + pr_err("No enough memory to copy FW data\n"); + ret = A_ERROR; + goto end; + } + + OS_MEMCPY(fw_mem, data, fw_size); + #ifdef CONFIG_CNSS - ret = cnss_get_sha_hash(data, data_size, "sha256", digest); + ret = cnss_get_sha_hash(fw_mem, fw_size, "sha256", digest); if (ret) { pr_err("Sha256 Hash computation fialed err:%d\n", ret); @@ -596,15 +604,8 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file, tempEeprom = NULL; #ifdef FEATURE_SECURE_FIRMWARE - if (fw_entry_size <= MAX_FIRMWARE_SIZE) { - OS_MEMCPY(fw_mem, fw_entry->data, fw_entry_size); - } else { - pr_err("%s: No enough memory to copy FW data!", __func__); - status = A_ERROR; - goto end; - } - if (ol_check_fw_hash(fw_mem, fw_entry_size, file)) { + if (ol_check_fw_hash(fw_entry->data, fw_entry_size, file)) { pr_err("Hash Check failed for file:%s\n", filename); status = A_ERROR; goto end; @@ -228,9 +228,6 @@ CONFIG_QCA_SINGLE_BINARY_SUPPORT := 0 #Enable collecting target RAM dump after kernel panic CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC := 1 -#Flag to enable/disable secure firmware feature -CONFIG_FEATURE_SECURE_FIRMWARE := 0 - #Flag to enable Stats Ext implementation CONFIG_FEATURE_STATS_EXT := 1 @@ -1262,7 +1259,7 @@ CDEFINES += -DTARGET_RAMDUMP_AFTER_KERNEL_PANIC endif #Enable/disable secure firmware feature -ifeq ($(CONFIG_FEATURE_SECURE_FIRMWARE), 1) +ifeq ($(CONFIG_CNSS_SECURE_FW), y) CDEFINES += -DFEATURE_SECURE_FIRMWARE endif |
