]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c
SecurityPkg/OpalPassword: Add warning message for Secure Erase
[mirror_edk2.git] / SecurityPkg / Tcg / Opal / OpalPassword / OpalDriver.c
index ed7f9682559a6208f30478a52912301e71f3ebcd..42999c89f0fb48673346b10b9c6e50053c416744 100644 (file)
@@ -487,6 +487,7 @@ OpalEndOfDxeEventNotify (
                             OPAL request.\r
   @param[in]  PopUpString   Pop up string.\r
   @param[in]  PopUpString2  Pop up string in line 2.\r
+  @param[in]  PopUpString3  Pop up string in line 3.\r
 \r
   @param[out] PressEsc      Whether user escape function through Press ESC.\r
 \r
@@ -498,6 +499,7 @@ OpalDriverPopUpPsidInput (
   IN OPAL_DRIVER_DEVICE     *Dev,\r
   IN CHAR16                 *PopUpString,\r
   IN CHAR16                 *PopUpString2,\r
+  IN CHAR16                 *PopUpString3,\r
   OUT BOOLEAN               *PressEsc\r
   )\r
 {\r
@@ -527,15 +529,28 @@ OpalDriverPopUpPsidInput (
         NULL\r
       );\r
     } else {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &InputKey,\r
-        PopUpString,\r
-        PopUpString2,\r
-        L"---------------------",\r
-        Mask,\r
-        NULL\r
-      );\r
+      if (PopUpString3 == NULL) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &InputKey,\r
+          PopUpString,\r
+          PopUpString2,\r
+          L"---------------------",\r
+          Mask,\r
+          NULL\r
+        );\r
+      } else {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &InputKey,\r
+          PopUpString,\r
+          PopUpString2,\r
+          PopUpString3,\r
+          L"---------------------",\r
+          Mask,\r
+          NULL\r
+        );\r
+      }\r
     }\r
 \r
     //\r
@@ -625,6 +640,7 @@ OpalDriverPopUpPsidInput (
                             process OPAL request.\r
   @param[in]  PopUpString1  Pop up string 1.\r
   @param[in]  PopUpString2  Pop up string 2.\r
+  @param[in]  PopUpString3  Pop up string 3.\r
   @param[out] PressEsc      Whether user escape function through Press ESC.\r
 \r
   @retval Password string if success. NULL if failed.\r
@@ -635,6 +651,7 @@ OpalDriverPopUpPasswordInput (
   IN OPAL_DRIVER_DEVICE     *Dev,\r
   IN CHAR16                 *PopUpString1,\r
   IN CHAR16                 *PopUpString2,\r
+  IN CHAR16                 *PopUpString3,\r
   OUT BOOLEAN               *PressEsc\r
   )\r
 {\r
@@ -664,15 +681,28 @@ OpalDriverPopUpPasswordInput (
         NULL\r
       );\r
     } else {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &InputKey,\r
-        PopUpString1,\r
-        PopUpString2,\r
-        L"---------------------",\r
-        Mask,\r
-        NULL\r
-      );\r
+      if (PopUpString3 == NULL) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &InputKey,\r
+          PopUpString1,\r
+          PopUpString2,\r
+          L"---------------------",\r
+          Mask,\r
+          NULL\r
+        );\r
+      } else {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &InputKey,\r
+          PopUpString1,\r
+          PopUpString2,\r
+          PopUpString3,\r
+          L"---------------------",\r
+          Mask,\r
+          NULL\r
+        );\r
+      }\r
     }\r
 \r
     //\r
@@ -823,7 +853,7 @@ OpalDriverRequestPassword (
     }\r
 \r
     while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-      Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, NULL, &PressEsc);\r
+      Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, NULL, NULL, &PressEsc);\r
       if (PressEsc) {\r
         if (IsLocked) {\r
           //\r
@@ -988,7 +1018,7 @@ ProcessOpalRequestEnableFeature (
   Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;\r
 \r
   while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your new password", &PressEsc);\r
+    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your new password", NULL, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1017,7 +1047,7 @@ ProcessOpalRequestEnableFeature (
     }\r
     PasswordLen = (UINT32) AsciiStrLen(Password);\r
 \r
-    PasswordConfirm = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please confirm your new password", &PressEsc);\r
+    PasswordConfirm = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please confirm your new password", NULL, &PressEsc);\r
     if (PasswordConfirm == NULL) {\r
       ZeroMem (Password, PasswordLen);\r
       FreePool (Password);\r
@@ -1132,7 +1162,7 @@ ProcessOpalRequestDisableUser (
   Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;\r
 \r
   while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, NULL, &PressEsc);\r
+    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, NULL, NULL, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1227,6 +1257,7 @@ ProcessOpalRequestPsidRevert (
   TCG_RESULT            Ret;\r
   CHAR16                *PopUpString;\r
   CHAR16                *PopUpString2;\r
+  CHAR16                *PopUpString3;\r
   UINTN                 BufferSize;\r
 \r
   if (Dev == NULL) {\r
@@ -1238,17 +1269,19 @@ ProcessOpalRequestPsidRevert (
   PopUpString = OpalGetPopUpString (Dev, RequestString);\r
 \r
   if (Dev->OpalDisk.EstimateTimeCost > MAX_ACCEPTABLE_REVERTING_TIME) {\r
-    BufferSize = StrSize (L"Warning: Revert action will take about ####### seconds, DO NOT power off system during the revert action!");\r
+    BufferSize = StrSize (L"Warning: Revert action will take about ####### seconds");\r
     PopUpString2 = AllocateZeroPool (BufferSize);\r
     ASSERT (PopUpString2 != NULL);\r
     UnicodeSPrint (\r
         PopUpString2,\r
         BufferSize,\r
-        L"WARNING: Revert action will take about %d seconds, DO NOT power off system during the revert action!",\r
+        L"WARNING: Revert action will take about %d seconds",\r
         Dev->OpalDisk.EstimateTimeCost\r
       );\r
+    PopUpString3 = L"DO NOT power off system during the revert action!";\r
   } else {\r
     PopUpString2 = NULL;\r
+    PopUpString3 = NULL;\r
   }\r
 \r
   Count = 0;\r
@@ -1259,7 +1292,7 @@ ProcessOpalRequestPsidRevert (
   Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;\r
 \r
   while (Count < MAX_PSID_TRY_COUNT) {\r
-    Psid = OpalDriverPopUpPsidInput (Dev, PopUpString, PopUpString2, &PressEsc);\r
+    Psid = OpalDriverPopUpPsidInput (Dev, PopUpString, PopUpString2, PopUpString3, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1361,6 +1394,7 @@ ProcessOpalRequestRevert (
   BOOLEAN               PasswordFailed;\r
   CHAR16                *PopUpString;\r
   CHAR16                *PopUpString2;\r
+  CHAR16                *PopUpString3;\r
   UINTN                 BufferSize;\r
 \r
   if (Dev == NULL) {\r
@@ -1373,17 +1407,19 @@ ProcessOpalRequestRevert (
 \r
   if ((!KeepUserData) &&\r
       (Dev->OpalDisk.EstimateTimeCost > MAX_ACCEPTABLE_REVERTING_TIME)) {\r
-    BufferSize = StrSize (L"Warning: Revert action will take about ####### seconds, DO NOT power off system during the revert action!");\r
+    BufferSize = StrSize (L"Warning: Revert action will take about ####### seconds");\r
     PopUpString2 = AllocateZeroPool (BufferSize);\r
     ASSERT (PopUpString2 != NULL);\r
     UnicodeSPrint (\r
         PopUpString2,\r
         BufferSize,\r
-        L"WARNING: Revert action will take about %d seconds, DO NOT power off system during the revert action!",\r
+        L"WARNING: Revert action will take about %d seconds",\r
         Dev->OpalDisk.EstimateTimeCost\r
       );\r
+    PopUpString3 = L"DO NOT power off system during the revert action!";\r
   } else {\r
     PopUpString2 = NULL;\r
+    PopUpString3 = NULL;\r
   }\r
 \r
   Count = 0;\r
@@ -1394,7 +1430,7 @@ ProcessOpalRequestRevert (
   Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;\r
 \r
   while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, PopUpString2, &PressEsc);\r
+    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, PopUpString2, PopUpString3, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1520,6 +1556,9 @@ ProcessOpalRequestSecureErase (
   TCG_RESULT            Ret;\r
   BOOLEAN               PasswordFailed;\r
   CHAR16                *PopUpString;\r
+  CHAR16                *PopUpString2;\r
+  CHAR16                *PopUpString3;\r
+  UINTN                 BufferSize;\r
 \r
   if (Dev == NULL) {\r
     return;\r
@@ -1529,6 +1568,21 @@ ProcessOpalRequestSecureErase (
 \r
   PopUpString = OpalGetPopUpString (Dev, RequestString);\r
 \r
+  if (Dev->OpalDisk.EstimateTimeCost > MAX_ACCEPTABLE_REVERTING_TIME) {\r
+    BufferSize = StrSize (L"Warning: Secure erase action will take about ####### seconds");\r
+    PopUpString2 = AllocateZeroPool (BufferSize);\r
+    ASSERT (PopUpString2 != NULL);\r
+    UnicodeSPrint (\r
+        PopUpString2,\r
+        BufferSize,\r
+        L"WARNING: Secure erase action will take about %d seconds",\r
+        Dev->OpalDisk.EstimateTimeCost\r
+      );\r
+    PopUpString3 = L"DO NOT power off system during the action!";\r
+  } else {\r
+    PopUpString2 = NULL;\r
+    PopUpString3 = NULL;\r
+  }\r
   Count = 0;\r
 \r
   ZeroMem(&Session, sizeof(Session));\r
@@ -1537,7 +1591,7 @@ ProcessOpalRequestSecureErase (
   Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;\r
 \r
   while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, NULL, &PressEsc);\r
+    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, PopUpString2, PopUpString3, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1551,7 +1605,7 @@ ProcessOpalRequestSecureErase (
 \r
         if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
           gST->ConOut->ClearScreen(gST->ConOut);\r
-          return;\r
+          goto Done;\r
         } else {\r
           //\r
           // Let user input password again.\r
@@ -1608,6 +1662,11 @@ ProcessOpalRequestSecureErase (
     } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
     gST->ConOut->ClearScreen(gST->ConOut);\r
   }\r
+\r
+Done:\r
+  if (PopUpString2 != NULL) {\r
+    FreePool (PopUpString2);\r
+  }\r
 }\r
 \r
 /**\r
@@ -1647,7 +1706,7 @@ ProcessOpalRequestSetUserPwd (
   Count = 0;\r
 \r
   while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-    OldPassword = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your password", &PressEsc);\r
+    OldPassword = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your password", NULL, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1705,7 +1764,7 @@ ProcessOpalRequestSetUserPwd (
       }\r
     }\r
 \r
-    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your new password", &PressEsc);\r
+    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your new password", NULL, &PressEsc);\r
     if (Password == NULL) {\r
       ZeroMem (OldPassword, OldPasswordLen);\r
       FreePool (OldPassword);\r
@@ -1714,7 +1773,7 @@ ProcessOpalRequestSetUserPwd (
     }\r
     PasswordLen = (UINT32) AsciiStrLen(Password);\r
 \r
-    PasswordConfirm = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please confirm your new password", &PressEsc);\r
+    PasswordConfirm = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please confirm your new password", NULL, &PressEsc);\r
     if (PasswordConfirm == NULL) {\r
       ZeroMem (OldPassword, OldPasswordLen);\r
       FreePool (OldPassword);\r
@@ -1846,7 +1905,7 @@ ProcessOpalRequestSetAdminPwd (
   Count = 0;\r
 \r
   while (Count < MAX_PASSWORD_TRY_COUNT) {\r
-    OldPassword = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your password", &PressEsc);\r
+    OldPassword = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your password", NULL, &PressEsc);\r
     if (PressEsc) {\r
         do {\r
           CreatePopUp (\r
@@ -1899,7 +1958,7 @@ ProcessOpalRequestSetAdminPwd (
       continue;\r
     }\r
 \r
-    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your new password", &PressEsc);\r
+    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please type in your new password", NULL, &PressEsc);\r
     if (Password == NULL) {\r
       ZeroMem (OldPassword, OldPasswordLen);\r
       FreePool (OldPassword);\r
@@ -1908,7 +1967,7 @@ ProcessOpalRequestSetAdminPwd (
     }\r
     PasswordLen = (UINT32) AsciiStrLen(Password);\r
 \r
-    PasswordConfirm = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please confirm your new password", &PressEsc);\r
+    PasswordConfirm = OpalDriverPopUpPasswordInput (Dev, PopUpString, L"Please confirm your new password", NULL, &PressEsc);\r
     if (PasswordConfirm == NULL) {\r
       ZeroMem (OldPassword, OldPasswordLen);\r
       FreePool (OldPassword);\r