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