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

