HMX_NVRAM_SetField fix: check actual field size for skipping check.
The skipping check was based on a size that's maxed out by input buffer length.
This caused a problem when existing hnvram content is "foobar" but input
content is "foo".
Change-Id: I6e4a2e025080e61e63997236c516ce4884a5287b
diff --git a/libupgrade/hmx_upgrade_nvram.c b/libupgrade/hmx_upgrade_nvram.c
index ecd198e..eb3ca59 100644
--- a/libupgrade/hmx_upgrade_nvram.c
+++ b/libupgrade/hmx_upgrade_nvram.c
@@ -871,9 +871,14 @@
return DRV_ERR_OUTOFMEMORY;
}
- errCode = HMX_NVRAM_GetFieldAndSize(field, offset, pBuf, nDataSize, &pLen);
- if (errCode == DRV_OK) {
- if (memcmp(pBuf, data, nDataSize) == 0 && pLen == nDataSize) {
+ int fieldLen = 0;
+ // Need to use fieldLen for actual field length because pLen is always
+ // <= nDataSize. If input data size is shorter this may falsely skip hnvram
+ // writing.
+ if (HMX_NVRAM_GetLength(field, &fieldLen) == DRV_OK &&
+ HMX_NVRAM_GetFieldAndSize(field, offset, pBuf, nDataSize, &pLen)
+ == DRV_OK) {
+ if (memcmp(pBuf, data, nDataSize) == 0 && fieldLen == nDataSize) {
free(pBuf);
return DRV_OK;
}