Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <[email protected]>
---
 .../Universal/HiiDatabaseDxe/ConfigKeywordHandler.c      | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c 
b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
index b978669..6923d6c 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
@@ -2827,10 +2827,11 @@ EfiConfigKeywordHandlerSetData (
   CHAR16                              *MultiConfigResp;
   CHAR16                              *ValueElement;
   BOOLEAN                             ReadOnly;
   EFI_STRING                          InternalProgress;
   CHAR16                              *TempString;
+  CHAR16                              *KeywordStartPos;
 
   if (This == NULL || Progress == NULL || ProgressErr == NULL || KeywordString 
== NULL) {
     return EFI_INVALID_PARAMETER;
   }
 
@@ -2841,10 +2842,11 @@ EfiConfigKeywordHandlerSetData (
   NameSpace       = NULL;
   DevicePath      = NULL;
   KeywordData     = NULL;
   ValueElement    = NULL;
   ConfigResp      = NULL;
+  KeywordStartPos = NULL;
   KeywordStringId = 0;
 
   //
   // Use temp string to avoid changing input string buffer.
   //
@@ -2884,10 +2886,11 @@ EfiConfigKeywordHandlerSetData (
     StringPtr = NextStringPtr;
 
     //
     // 3. Extract keyword from the KeywordRequest string.
     //
+    KeywordStartPos = StringPtr;
     Status = ExtractKeyword(StringPtr, &KeywordData, &NextStringPtr);
     if (EFI_ERROR (Status)) {
       //
       // Can't find Keyword base on the input device path info.
       //
@@ -2940,12 +2943,12 @@ EfiConfigKeywordHandlerSetData (
 
     //
     // 8. Check the readonly flag.
     //
     if (ExtractReadOnlyFromOpCode (OpCode) != ReadOnly) {
-      *ProgressErr = KEYWORD_HANDLER_INCOMPATIBLE_VALUE_DETECTED;
-      Status = EFI_INVALID_PARAMETER;
+      *ProgressErr = KEYWORD_HANDLER_ACCESS_NOT_PERMITTED;
+      Status = EFI_ACCESS_DENIED;
       goto Done;      
     }
     
     //
     // 9. Merge to the MultiKeywordResp string.
@@ -2968,10 +2971,11 @@ EfiConfigKeywordHandlerSetData (
     ValueElement = NULL;
     if (ConfigResp != NULL) {
       FreePool (ConfigResp);
       ConfigResp = NULL;
     }
+    KeywordStartPos = NULL;
   }
 
   //
   // 11. Set value to driver.
   //
@@ -2986,11 +2990,15 @@ EfiConfigKeywordHandlerSetData (
   }
   
   *ProgressErr = KEYWORD_HANDLER_NO_ERROR;
 
 Done:
-  *Progress = KeywordString + (StringPtr - TempString);
+  if (KeywordStartPos != NULL) {
+    *Progress = KeywordString + (KeywordStartPos - TempString);
+  } else {
+    *Progress = KeywordString + (StringPtr - TempString);
+  }
 
   ASSERT (TempString != NULL);
   FreePool (TempString);
   if (NameSpace != NULL) {
     FreePool (NameSpace);
@@ -3008,11 +3016,11 @@ Done:
     FreePool (ConfigResp);
   }
   if (MultiConfigResp != NULL && MultiConfigResp != ConfigResp) {
     FreePool (MultiConfigResp);
   }
-  
+
   return Status;
 }
 
 /**
 
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to