Enhance the input password process, when device in unlock status and user press ESC, shutdown the device. If user reach the max try number, shutdown the device.
Cc: Feng Tian <feng.t...@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong <eric.d...@intel.com> --- SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.c | 69 +++++++++++++++-------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.c b/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.c index 7c6deb8..d7f814f 100644 --- a/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.c +++ b/SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.c @@ -263,6 +263,7 @@ OpalDriverRequestPassword ( EFI_INPUT_KEY Key; OPAL_SESSION Session; BOOLEAN PressEsc; + BOOLEAN Locked; if (Dev == NULL) { return; @@ -277,33 +278,56 @@ OpalDriverRequestPassword ( Session.MediaId = Dev->OpalDisk.MediaId; Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId; + Locked = OpalDeviceLocked (&Dev->OpalDisk.SupportedAttributes, &Dev->OpalDisk.LockingFeature); + while (Count < MAX_PASSWORD_TRY_COUNT) { Password = OpalDriverPopUpHddPassword (Dev, &PressEsc); if (PressEsc) { - // - // User not input password and press ESC, keep device in lock status and continue boot. - // - do { - CreatePopUp ( - EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, - &Key, - L"Confirm: Not unlock device and continue boot?.", - L"Press ENTER to confirm, Press Esc to input password", - NULL - ); - } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN)); - - if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) { - gST->ConOut->ClearScreen(gST->ConOut); + if (Locked) { // - // Keep lock and continue boot. + // Current device in the lock status and + // User not input password and press ESC, + // keep device in lock status and continue boot. // - return; + do { + CreatePopUp ( + EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, + &Key, + L"Confirm: Not unlock device and continue boot?.", + L"Press ENTER to confirm, Press Esc to input password", + NULL + ); + } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN)); + + if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) { + gST->ConOut->ClearScreen(gST->ConOut); + // + // Keep lock and continue boot. + // + return; + } else { + // + // Let user input password again. + // + continue; + } } else { // - // Let user input password again. + // Current device in the unlock status and + // User not input password and press ESC, + // Shutdown the device. // - continue; + do { + CreatePopUp ( + EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, + &Key, + L"Warning: system in unkown status, must shutdown!", + L"Press ENTER to shutdown.", + NULL + ); + } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN); + + gRT->ResetSystem (EfiResetShutdown, EFI_SUCCESS, 0, NULL); } } @@ -313,7 +337,7 @@ OpalDriverRequestPassword ( } PasswordLen = (UINT32) AsciiStrLen(Password); - if (OpalDeviceLocked (&Dev->OpalDisk.SupportedAttributes, &Dev->OpalDisk.LockingFeature)) { + if (Locked) { Ret = OpalSupportUnlock(&Session, Password, PasswordLen, Dev->OpalDevicePath); } else { Ret = OpalSupportLock(&Session, Password, PasswordLen, Dev->OpalDevicePath); @@ -349,12 +373,13 @@ OpalDriverRequestPassword ( CreatePopUp ( EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, - L"Opal password retry count is expired. Keep lock and continue boot.", + L"Opal password retry count exceeds the limit. Must shutdown!", L"Press ENTER to continue", NULL ); } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN); - gST->ConOut->ClearScreen(gST->ConOut); + + gRT->ResetSystem (EfiResetShutdown, EFI_SUCCESS, 0, NULL); } } } -- 2.6.4.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel