summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKomal Seelam <kseelam@qti.qualcomm.com>2014-09-13 23:13:02 +0530
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-09-18 19:23:49 +0530
commit31aafbb7c91cf06729c550dd2a36ae542faecaf4 (patch)
treed8060b0ed5d5daa18fa9ad9d6eeb94094062ed7b
parentbe2631e8f0919eee1b31ff66ed7517ea26e33076 (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.c27
-rw-r--r--Kbuild5
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;
diff --git a/Kbuild b/Kbuild
index ef958c973514..7d9cf52579f1 100644
--- a/Kbuild
+++ b/Kbuild
@@ -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