From 77df17ffa703e201d99c091539ff0d800e620449 Mon Sep 17 00:00:00 2001 From: Sharad Binjola <31142146+sharadb-amazon@users.noreply.github.com> Date: Mon, 12 Dec 2022 15:58:55 -0800 Subject: [PATCH] Fixing size checks in Set/GetRotatingDeviceIdUniqueId and right sizing mRotatingDeviceIdUniqueId (#24042) --- .../include/CHIPProjectAppConfig.h | 2 ++ .../internal/GenericConfigurationManagerImpl.h | 4 +++- .../internal/GenericConfigurationManagerImpl.ipp | 13 +++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h b/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h index ca3b9bd3ca5be8..b8daebc0a86f5e 100644 --- a/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h +++ b/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h @@ -55,3 +55,5 @@ #define CONFIG_BUILD_FOR_HOST_UNIT_TEST 1 #define CHIP_ENABLE_ROTATING_DEVICE_ID 1 + +#define CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH 64 diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.h b/src/include/platform/internal/GenericConfigurationManagerImpl.h index b28d17e9bec989..21310be54641d9 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.h +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.h @@ -118,7 +118,9 @@ class GenericConfigurationManagerImpl : public ConfigurationManager protected: #if CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) chip::LifetimePersistedCounter mLifetimePersistedCounter; - uint8_t mRotatingDeviceIdUniqueId[kRotatingDeviceIDUniqueIDLength] = CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID; + uint8_t mRotatingDeviceIdUniqueId[CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH] = + CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID; + size_t mRotatingDeviceIdUniqueIdLength = kRotatingDeviceIDUniqueIDLength; #endif friend GenericDeviceInstanceInfoProvider; diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp index ee996282edab68..0367f01318c88b 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp @@ -541,18 +541,19 @@ CHIP_ERROR GenericConfigurationManagerImpl::IncrementLifetimeCounte template CHIP_ERROR GenericConfigurationManagerImpl::SetRotatingDeviceIdUniqueId(const ByteSpan & uniqueIdSpan) { - ReturnErrorCodeIf(uniqueIdSpan.size() != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL); - memcpy(mRotatingDeviceIdUniqueId, uniqueIdSpan.data(), kRotatingDeviceIDUniqueIDLength); + ReturnErrorCodeIf(uniqueIdSpan.size() < kMinRotatingDeviceIDUniqueIDLength, CHIP_ERROR_INVALID_ARGUMENT); + ReturnErrorCodeIf(uniqueIdSpan.size() > CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH, CHIP_ERROR_BUFFER_TOO_SMALL); + memcpy(mRotatingDeviceIdUniqueId, uniqueIdSpan.data(), uniqueIdSpan.size()); + mRotatingDeviceIdUniqueIdLength = uniqueIdSpan.size(); return CHIP_NO_ERROR; } template CHIP_ERROR GenericConfigurationManagerImpl::GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) { - ReturnErrorCodeIf(sizeof(mRotatingDeviceIdUniqueId) > uniqueIdSpan.size(), CHIP_ERROR_BUFFER_TOO_SMALL); - ReturnErrorCodeIf(uniqueIdSpan.size() != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL); - memcpy(uniqueIdSpan.data(), mRotatingDeviceIdUniqueId, sizeof(mRotatingDeviceIdUniqueId)); - uniqueIdSpan.reduce_size(sizeof(mRotatingDeviceIdUniqueId)); + ReturnErrorCodeIf(mRotatingDeviceIdUniqueIdLength > uniqueIdSpan.size(), CHIP_ERROR_BUFFER_TOO_SMALL); + memcpy(uniqueIdSpan.data(), mRotatingDeviceIdUniqueId, mRotatingDeviceIdUniqueIdLength); + uniqueIdSpan.reduce_size(mRotatingDeviceIdUniqueIdLength); return CHIP_NO_ERROR; }