Fix Pointer arithmetic error in hwUniqueID() (#1589)

This commit is contained in:
Olivier
2026-02-07 14:14:17 +01:00
committed by GitHub
parent b8f8b6e2dd
commit 18d07471b2
5 changed files with 17 additions and 14 deletions

View File

@@ -70,9 +70,10 @@ void hwWriteConfig(const int addr, uint8_t value)
bool hwUniqueID(unique_id_t *uniqueID)
{
// padding
(void)memset(reinterpret_cast<uint8_t *>(uniqueID), MY_HWID_PADDING_BYTE, sizeof(unique_id_t));
uint64_t val = ESP.getEfuseMac();
(void)memcpy(static_cast<void *>(uniqueID), (void *)&val, 8);
(void)memset(static_cast<void *>(uniqueID + 8), MY_HWID_PADDING_BYTE, 8); // padding
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID), (void *)&val, 8);
return true;
}

View File

@@ -67,11 +67,11 @@ void hwWriteConfig(const int addr, uint8_t value)
bool hwUniqueID(unique_id_t *uniqueID)
{
// padding
(void)memset((uint8_t *)uniqueID, MY_HWID_PADDING_BYTE, sizeof(unique_id_t));
(void)memset(reinterpret_cast<uint8_t *>(uniqueID), MY_HWID_PADDING_BYTE, sizeof(unique_id_t));
uint32_t val = ESP.getChipId();
(void)memcpy((uint8_t *)uniqueID, &val, 4);
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID), &val, 4);
val = ESP.getFlashChipId();
(void)memcpy((uint8_t *)uniqueID + 4, &val, 4);
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID) + 4, &val, 4);
return true;
}

View File

@@ -130,8 +130,9 @@ int8_t hwSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t inte
bool hwUniqueID(unique_id_t *uniqueID)
{
(void)memcpy((uint8_t *)uniqueID, (uint32_t *)0x0080A00C, 4);
(void)memcpy((uint8_t *)uniqueID + 4, (uint32_t *)0x0080A040, 12);
// No padding required, as unique ID is already 16 bytes
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID), (uint32_t *)0x0080A00C, 4);
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID) + 4, (uint32_t *)0x0080A040, 12);
return true;
}

View File

@@ -173,10 +173,9 @@ void hwRandomNumberInit(void)
bool hwUniqueID(unique_id_t *uniqueID)
{
#ifdef UID_BASE
// STM32 unique device ID is stored at a fixed address
// Length is 96 bits (12 bytes) but we store 16 bytes for compatibility
(void)memcpy((uint8_t *)uniqueID, (uint32_t *)UID_BASE, 12);
(void)memset(static_cast<void *>(uniqueID + 12), MY_HWID_PADDING_BYTE, 4); // padding
// padding
(void)memset(reinterpret_cast<uint8_t *>(uniqueID), MY_HWID_PADDING_BYTE, sizeof(unique_id_t));
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID), (uint32_t *)UID_BASE, 12);
return true;
#else
// Unique ID not available on this variant

View File

@@ -94,10 +94,12 @@ int8_t hwSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t inte
bool hwUniqueID(unique_id_t *uniqueID)
{
#if defined(__MKL26Z64__)
(void)memcpy((uint8_t *)uniqueID, &SIM_UIDMH, 12);
(void)memset((uint8_t *)uniqueID + 12, MY_HWID_PADDING_BYTE, 4);
// padding
(void)memset(reinterpret_cast<uint8_t *>(uniqueID), MY_HWID_PADDING_BYTE, sizeof(unique_id_t));
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID), &SIM_UIDMH, 12);
#else
(void)memcpy((uint8_t *)uniqueID, &SIM_UIDH, 16);
// No padding required, as unique ID is already 16 bytes
(void)memcpy(reinterpret_cast<uint8_t *>(uniqueID), &SIM_UIDH, 16);
#endif
return true;
}