[EFR32] Fix Storage audit - Allow storing null pointer of size 0 (#20290)
* Fix Storage audit - Allow storing null pointer of size 0
* Clarify comment
diff --git a/src/platform/EFR32/EFR32Config.cpp b/src/platform/EFR32/EFR32Config.cpp
index 74308f1..9c156ac 100644
--- a/src/platform/EFR32/EFR32Config.cpp
+++ b/src/platform/EFR32/EFR32Config.cpp
@@ -236,7 +236,6 @@
// Get nvm3 object info.
err = MapNvm3Error(nvm3_getObjectInfo(nvm3_defaultHandle, key, &objectType, &dataLen));
SuccessOrExit(err);
- VerifyOrExit(dataLen > 0, err = CHIP_ERROR_INVALID_STRING_LENGTH);
if (buf != NULL)
{
@@ -325,7 +324,7 @@
CHIP_ERROR EFR32Config::WriteConfigValueStr(Key key, const char * str, size_t strLen)
{
- CHIP_ERROR err;
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
@@ -336,10 +335,6 @@
err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, str, (strLen > 0) ? strLen : 1));
SuccessOrExit(err);
}
- else
- {
- nvm3_deleteObject(nvm3_defaultHandle, key); // no error checking here.
- }
exit:
return err;
@@ -347,22 +342,16 @@
CHIP_ERROR EFR32Config::WriteConfigValueBin(Key key, const uint8_t * data, size_t dataLen)
{
- CHIP_ERROR err;
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
VerifyOrExit(ValidConfigKey(key), err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND); // Verify key id.
- if (data != NULL)
+ // Only write NULL pointer if the given size is 0, since in that case, nothing is read at the pointer
+ if ((data != NULL) || (dataLen == 0))
{
- if (dataLen > 0)
- {
- // Write the binary data to nvm3.
- err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, data, dataLen));
- SuccessOrExit(err);
- }
- }
- else
- {
- nvm3_deleteObject(nvm3_defaultHandle, key); // no error checking here.
+ // Write the binary data to nvm3.
+ err = MapNvm3Error(nvm3_writeData(nvm3_defaultHandle, key, data, dataLen));
+ SuccessOrExit(err);
}
exit: