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;
     }