From 034a3b4f555c6844673a5ee6b7aa4faa74e90a6e Mon Sep 17 00:00:00 2001 From: GregX Yeh Date: Tue, 9 Jul 2019 11:46:54 +0000 Subject: [PATCH] MdeModulePkg/Setup: Check ConfigAccess protocol in case it's destroyed https://bugzilla.tianocore.org/show_bug.cgi?id=1920 Check ConfigAccess protocol is available before process user input. Signed-off-by: GregX Yeh Cc: Dandan Bi Cc: Ray Ni Cc: Ted Kuo Reviewed-by: Dandan Bi --- .../Universal/SetupBrowserDxe/Presentation.c | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c index d7927725b2..7c36a6f2b7 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c @@ -20,6 +20,38 @@ UINT16 mCurFakeQestId; FORM_DISPLAY_ENGINE_FORM gDisplayFormData; BOOLEAN mFinishRetrieveCall = FALSE; +/** + Check whether the ConfigAccess protocol is available + + @parm FormSet FormSet of which the ConfigAcces protocol need to be checked. + + @retval EFI_SUCCESS The function executed successfully. + +**/ +EFI_STATUS +CheckConfigAccess( + IN FORM_BROWSER_FORMSET *FormSet + ) +{ + EFI_STATUS Status; + + Status = gBS->HandleProtocol ( + FormSet->DriverHandle, + &gEfiHiiConfigAccessProtocolGuid, + (VOID **) &FormSet->ConfigAccess + ); + if (EFI_ERROR (Status)) { + // + // Configuration Driver don't attach ConfigAccess protocol to its HII package + // list, then there will be no configuration action required. + // Or the ConfigAccess protocol has been uninstalled. + // + FormSet->ConfigAccess = NULL; + } + + return EFI_SUCCESS; +} + /** Evaluate all expressions in a Form. @@ -1686,6 +1718,8 @@ DisplayForm ( return Status; } + CheckConfigAccess(gCurrentSelection->FormSet); + Status = ProcessUserInput (&UserInput); FreeDisplayFormData(); return Status;