Change callback handler type to avoid saving password in
browser temp buffer.

Cc: Feng Tian <[email protected]>
Cc: Jiewen Yao <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <[email protected]>
---
 SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c     | 25 +++++++++++++++-------
 .../Tcg/Opal/OpalPasswordDxe/OpalHiiPrivate.h      |  4 +++-
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c 
b/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c
index bae2b2b..e50a683 100644
--- a/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c
+++ b/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c
@@ -464,14 +464,12 @@ DriverCallback(
 
       case HII_KEY_ID_ENTER_PASSWORD:
         return HiiPasswordEntered(Value->string);
+
+      case HII_KEY_ID_ENTER_PSID:
+        return HiiPsidRevert(Value->string);
     }
   } else if (Action == EFI_BROWSER_ACTION_CHANGED) {
     switch (HiiKeyId) {
-      case HII_KEY_ID_ENTER_PSID:
-        HiiPsidRevert();
-        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;
-        return EFI_SUCCESS;
-
       case HII_KEY_ID_BLOCKSID:
         HiiSetBlockSid(Value->b);
         *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;
@@ -594,12 +592,14 @@ HiiPopulateDiskInfoForm(
 /**
   Reverts the Opal disk to factory default.
 
+  @param   PsidStringId      The string id for the PSID info.
+
   @retval  EFI_SUCCESS       Do the required action success.
 
 **/
 EFI_STATUS
 HiiPsidRevert(
-  VOID
+  EFI_STRING_ID         PsidStringId
   )
 {
   CHAR8                         Response[DEFAULT_RESPONSE_SIZE];
@@ -607,12 +607,21 @@ HiiPsidRevert(
   OPAL_DISK                     *OpalDisk;
   TCG_RESULT                    Ret;
   OPAL_SESSION                  Session;
+  CHAR16                        *UnicodeStr;
 
   Ret = TcgResultFailure;
 
-  OpalHiiGetBrowserData();
+  UnicodeStr = HiiGetString (gHiiPackageListHandle, PsidStringId, NULL);
+
+  UnicodeStrToAsciiStr(UnicodeStr, (CHAR8*)Psid.Psid);
+
+  //
+  // For security concern, clean up the password after use it.
+  //
+  HiiSetString (gHiiPackageListHandle, PsidStringId, L"", NULL);
 
-  UnicodeStrToAsciiStr(gHiiConfiguration.Psid, (CHAR8*)Psid.Psid);
+  ZeroMem (UnicodeStr, StrSize (UnicodeStr));
+  FreePool (UnicodeStr);
 
   OpalDisk = HiiGetOpalDiskCB (gHiiConfiguration.SelectedDiskIndex);
   if (OpalDisk != NULL) {
diff --git a/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHiiPrivate.h 
b/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHiiPrivate.h
index 366cd38..e873a24 100644
--- a/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHiiPrivate.h
+++ b/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHiiPrivate.h
@@ -225,12 +225,14 @@ HiiSetBlockSid (
 /**
   Reverts the Opal disk to factory default.
 
+  @param   PsidStringId      The string id for the PSID info.
+
   @retval  EFI_SUCCESS       Do the required action success.
 
 **/
 EFI_STATUS
 HiiPsidRevert(
-  VOID
+  EFI_STRING_ID         PsidStringId
   );
 
 /**
-- 
2.6.4.windows.1

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

Reply via email to