From a8938a57c753aff4849ff650ecdf9b4209a2dbf1 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Mon, 24 Jun 2024 11:14:16 -0500 Subject: [PATCH] fix(PeriphDrivers): MXC_SYS_GetUSN Checksum error (#1050) --- .../Cordio/platform/targets/maxim/max32655/sources/pal_cfg.c | 4 ++-- .../Cordio/platform/targets/maxim/max32665/sources/pal_cfg.c | 4 ++-- .../Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c | 4 ++-- Libraries/PeriphDrivers/Source/SYS/sys_me12.c | 4 +++- Libraries/PeriphDrivers/Source/SYS/sys_me15.c | 5 ++++- Libraries/PeriphDrivers/Source/SYS/sys_me17.c | 5 ++++- Libraries/PeriphDrivers/Source/SYS/sys_me18.c | 4 ++-- Libraries/PeriphDrivers/Source/SYS/sys_me21.c | 5 ++++- 8 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Libraries/Cordio/platform/targets/maxim/max32655/sources/pal_cfg.c b/Libraries/Cordio/platform/targets/maxim/max32655/sources/pal_cfg.c index 6e8ae59cc0e..6bfe17eb0e7 100644 --- a/Libraries/Cordio/platform/targets/maxim/max32655/sources/pal_cfg.c +++ b/Libraries/Cordio/platform/targets/maxim/max32655/sources/pal_cfg.c @@ -185,8 +185,8 @@ void palCfgLoadLlParams(uint8_t *pConfig) /*************************************************************************************************/ void palCfgLoadBdAddress(uint8_t *pDevAddr) { - uint8_t id[MXC_SYS_USN_CHECKSUM_LEN]; - uint8_t checksum[MXC_SYS_USN_CHECKSUM_LEN]; + uint8_t id[MXC_SYS_USN_LEN] = {0}; + uint8_t checksum[MXC_SYS_USN_CHECKSUM_LEN] = {0}; if(MXC_SYS_GetUSN((uint8_t*)id, (uint8_t*)checksum) != E_NO_ERROR) { PalSysAssertTrap(); diff --git a/Libraries/Cordio/platform/targets/maxim/max32665/sources/pal_cfg.c b/Libraries/Cordio/platform/targets/maxim/max32665/sources/pal_cfg.c index 371c644d3bc..54094e11f5a 100644 --- a/Libraries/Cordio/platform/targets/maxim/max32665/sources/pal_cfg.c +++ b/Libraries/Cordio/platform/targets/maxim/max32665/sources/pal_cfg.c @@ -185,8 +185,8 @@ void palCfgLoadLlParams(uint8_t *pConfig) /*************************************************************************************************/ void palCfgLoadBdAddress(uint8_t *pDevAddr) { - uint8_t id[MXC_SYS_USN_CHECKSUM_LEN]; - uint8_t checksum[MXC_SYS_USN_CHECKSUM_LEN]; + uint8_t id[MXC_SYS_USN_LEN] = {0}; + uint8_t checksum[MXC_SYS_USN_CHECKSUM_LEN] = {0}; if(MXC_SYS_GetUSN(id, checksum) != E_NO_ERROR) { PalSysAssertTrap(); diff --git a/Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c b/Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c index a25166393a1..959fde118cd 100644 --- a/Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c +++ b/Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c @@ -185,8 +185,8 @@ void palCfgLoadLlParams(uint8_t *pConfig) /*************************************************************************************************/ void palCfgLoadBdAddress(uint8_t *pDevAddr) { - uint8_t id[MXC_SYS_USN_CHECKSUM_LEN]; - uint8_t checksum[MXC_SYS_USN_CHECKSUM_LEN]; + uint8_t id[MXC_SYS_USN_LEN] = {0}; + uint8_t checksum[MXC_SYS_USN_CHECKSUM_LEN] = {0}; if(MXC_SYS_GetUSN((uint8_t*)id, (uint8_t*)checksum) != E_NO_ERROR) { PalSysAssertTrap(); diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me12.c b/Libraries/PeriphDrivers/Source/SYS/sys_me12.c index 4d0cd9117d1..d7db012f1eb 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me12.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me12.c @@ -103,10 +103,12 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); + uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + memcpy(usn_copy, usn, MXC_SYS_USN_LEN); // Compute Checksum mxc_aes_req_t aes_req; aes_req.length = MXC_SYS_USN_CHECKSUM_LEN / 4; - aes_req.inputData = (uint32_t *)usn; + aes_req.inputData = (uint32_t *)usn_copy; aes_req.resultData = (uint32_t *)check_csum; aes_req.keySize = MXC_AES_128BITS; aes_req.encryption = MXC_AES_ENCRYPT_EXT_KEY; diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me15.c b/Libraries/PeriphDrivers/Source/SYS/sys_me15.c index a1c8a07cecd..dd4ad6874dc 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me15.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me15.c @@ -110,10 +110,13 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); + uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + memcpy(usn_copy, usn, MXC_SYS_USN_LEN); + // Compute Checksum mxc_aes_req_t aes_req; aes_req.length = MXC_SYS_USN_CHECKSUM_LEN / 4; - aes_req.inputData = (uint32_t *)usn; + aes_req.inputData = (uint32_t *)usn_copy; aes_req.resultData = (uint32_t *)check_csum; aes_req.keySize = MXC_AES_128BITS; aes_req.encryption = MXC_AES_ENCRYPT_EXT_KEY; diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me17.c b/Libraries/PeriphDrivers/Source/SYS/sys_me17.c index d3484141d40..cb9ad4328bc 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me17.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me17.c @@ -105,10 +105,13 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); + uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + memcpy(usn_copy, usn, MXC_SYS_USN_LEN); + // Compute Checksum mxc_aes_req_t aes_req; aes_req.length = MXC_SYS_USN_CHECKSUM_LEN / 4; - aes_req.inputData = (uint32_t *)usn; + aes_req.inputData = (uint32_t *)usn_copy; aes_req.resultData = (uint32_t *)check_csum; aes_req.keySize = MXC_AES_128BITS; aes_req.encryption = MXC_AES_ENCRYPT_EXT_KEY; diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me18.c b/Libraries/PeriphDrivers/Source/SYS/sys_me18.c index 02ea843df30..2c8ffa88940 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me18.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me18.c @@ -97,9 +97,9 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) /* Initialize key and plaintext */ memset(key, 0, MXC_SYS_USN_CHECKSUM_LEN); memset(pt32, 0, MXC_SYS_USN_CHECKSUM_LEN); - memcpy(pt32, usn, MXC_SYS_USN_CHECKSUM_LEN); + memcpy(pt32, usn, MXC_SYS_USN_LEN); - /* Read the checksum from the info block */ + /* Read the checksum from the inspfo block */ checksum[1] = ((infoblock[3] & 0x7F800000) >> 23); checksum[0] = ((infoblock[4] & 0x007F8000) >> 15); diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me21.c b/Libraries/PeriphDrivers/Source/SYS/sys_me21.c index b0463ee8720..f84de5857a3 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me21.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me21.c @@ -102,10 +102,13 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); + uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + memcpy(usn_copy, usn, MXC_SYS_USN_LEN); + // Compute Checksum mxc_aes_req_t aes_req; aes_req.length = MXC_SYS_USN_CHECKSUM_LEN / 4; - aes_req.inputData = (uint32_t *)usn; + aes_req.inputData = (uint32_t *)usn_copy; aes_req.resultData = (uint32_t *)check_csum; aes_req.keySize = MXC_AES_128BITS; aes_req.encryption = MXC_AES_ENCRYPT_EXT_KEY;