]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c
SecurityPkg OpalPasswordDxe: Check BlockSid capability before send command.
[mirror_edk2.git] / SecurityPkg / Tcg / Opal / OpalPasswordDxe / OpalHii.c
index 250cb438e94f39934adad3ba5140fdb54074fdeb..3fb3553f27f807debdc07f6aad5fe1ddf46e18ac 100644 (file)
@@ -102,49 +102,11 @@ HiiSetCurrentConfiguration(
                   &DataSize,\r
                   &OpalExtraInfo\r
                   );\r
-  DEBUG ((DEBUG_INFO, "GetVariable for OpalExtraInfo @ HiiSetCurrentConfiguration, Status: %r\n", Status));\r
   if (!EFI_ERROR (Status)) {\r
     gHiiConfiguration.EnableBlockSid = OpalExtraInfo.EnableBlockSid;\r
   }\r
 }\r
 \r
-/**\r
-  Check that all required protocols for HII are available.\r
-\r
-  @retval  EFI_SUCCESS        All required protocols are installed.\r
-  @retval  EFI_NOT_FOUND      One or more protocol are not installed.\r
-**/\r
-EFI_STATUS\r
-HiiCheckForRequiredProtocols (\r
-  VOID\r
-  )\r
-{\r
-  VOID*       TempProtocol;\r
-  EFI_STATUS  Status;\r
-\r
-  Status = gBS->LocateProtocol(&gEfiHiiStringProtocolGuid, NULL, (VOID**)&TempProtocol );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  Status = gBS->LocateProtocol(&gEfiHiiDatabaseProtocolGuid, NULL, (VOID**)&TempProtocol );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  Status = gBS->LocateProtocol(&gEfiHiiConfigRoutingProtocolGuid, NULL, (VOID**)&TempProtocol );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  Status = gBS->LocateProtocol(&gEfiFormBrowser2ProtocolGuid, NULL, (VOID**)&TempProtocol );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
 /**\r
   Install the HII related resources.\r
 \r
@@ -159,15 +121,6 @@ HiiInstall(
   EFI_STATUS                   Status;\r
   EFI_HANDLE                   DriverHandle;\r
 \r
-  //\r
-  // Check that all required protocols are available for HII.\r
-  // If not, fail the install\r
-  //\r
-  Status = HiiCheckForRequiredProtocols();\r
-  if (EFI_ERROR(Status)) {\r
-    return Status;\r
-  }\r
-\r
   //\r
   // Clear the global configuration.\r
   //\r
@@ -374,7 +327,13 @@ HiiSelectDiskAction (
 \r
     case HII_KEY_ID_GOTO_REVERT:\r
       gHiiConfiguration.AvailableFields |= HII_FIELD_PASSWORD;\r
-      gHiiConfiguration.AvailableFields |= HII_FIELD_KEEP_USER_DATA;\r
+      if (OpalDisk->SupportedAttributes.PyriteSsc != 1) {\r
+        //\r
+        // According to current Pyrite SSC Spec 1.00, there is no parameter for RevertSP method.\r
+        // So issue RevertSP method without any parameter by suppress KeepUserData option.\r
+        //\r
+        gHiiConfiguration.AvailableFields |= HII_FIELD_KEEP_USER_DATA;\r
+      }\r
       if (AvailActions.RevertKeepDataForced) {\r
         gHiiConfiguration.AvailableFields |= HII_FIELD_KEEP_USER_DATA_FORCED;\r
       }\r
@@ -435,12 +394,12 @@ GetDiskNameStringId(
 EFI_STATUS\r
 EFIAPI\r
 DriverCallback(\r
-  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL*   This,\r
+  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL    *This,\r
   EFI_BROWSER_ACTION                      Action,\r
   EFI_QUESTION_ID                         QuestionId,\r
   UINT8                                   Type,\r
-  EFI_IFR_TYPE_VALUE*                     Value,\r
-  EFI_BROWSER_ACTION_REQUEST*             ActionRequest\r
+  EFI_IFR_TYPE_VALUE                      *Value,\r
+  EFI_BROWSER_ACTION_REQUEST              *ActionRequest\r
   )\r
 {\r
   HII_KEY    HiiKey;\r
@@ -448,6 +407,8 @@ DriverCallback(
 \r
   if (ActionRequest != NULL) {\r
     *ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
+  } else {\r
+    return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   //\r
@@ -503,9 +464,6 @@ DriverCallback(
 \r
       case HII_KEY_ID_ENTER_PASSWORD:\r
         return HiiPasswordEntered(Value->string);\r
-\r
-      case HII_KEY_ID_BLOCKSID:\r
-        return HiiSetBlockSid(Value->b);\r
     }\r
   } else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
     switch (HiiKeyId) {\r
@@ -513,6 +471,11 @@ DriverCallback(
         HiiPsidRevert();\r
         *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
         return EFI_SUCCESS;\r
+\r
+      case HII_KEY_ID_BLOCKSID:\r
+        HiiSetBlockSid(Value->b);\r
+        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
+        return EFI_SUCCESS;\r
     }\r
   }\r
 \r
@@ -600,7 +563,6 @@ HiiPopulateDiskInfoForm(
         gHiiConfiguration.SelectedDiskAvailableActions |= (AvailActions.UserPass == 1) ? HII_ACTION_SET_USER_PWD : HII_ACTION_NONE;\r
         gHiiConfiguration.SelectedDiskAvailableActions |= (AvailActions.SecureErase == 1) ? HII_ACTION_SECURE_ERASE : HII_ACTION_NONE;\r
         gHiiConfiguration.SelectedDiskAvailableActions |= (AvailActions.DisableUser == 1) ? HII_ACTION_DISABLE_USER : HII_ACTION_NONE;\r
-        gHiiConfiguration.SelectedDiskAvailableActions |= HII_ACTION_ENABLE_BLOCKSID;\r
 \r
         HiiSetFormString (STRING_TOKEN(STR_DISK_INFO_PSID_REVERT), "PSID Revert to factory default and Disable");\r
 \r
@@ -609,6 +571,14 @@ HiiPopulateDiskInfoForm(
         // Default initialize keep user Data to be true\r
         //\r
         gHiiConfiguration.KeepUserData = 1;\r
+        if (OpalDisk->SupportedAttributes.PyriteSsc == 1) {\r
+          //\r
+          // According to current Pyrite SSC Spec 1.00, there is no parameter for RevertSP method.\r
+          // So issue RevertSP method without any parameter by set default value to FALSE.\r
+          //\r
+          gHiiConfiguration.KeepUserData = 0;\r
+        }\r
+\r
       }\r
     }\r
   }\r
@@ -644,14 +614,13 @@ HiiPsidRevert(
 \r
   UnicodeStrToAsciiStr(gHiiConfiguration.Psid, (CHAR8*)Psid.Psid);\r
 \r
-  OpalDisk = HiiGetOpalDiskCB(gHiiConfiguration.SelectedDiskIndex);\r
-\r
-  ZeroMem(&Session, sizeof(Session));\r
-  Session.Sscp = OpalDisk->Sscp;\r
-  Session.MediaId = OpalDisk->MediaId;\r
-  Session.OpalBaseComId = OpalDisk->OpalBaseComId;\r
-\r
+  OpalDisk = HiiGetOpalDiskCB (gHiiConfiguration.SelectedDiskIndex);\r
   if (OpalDisk != NULL) {\r
+    ZeroMem(&Session, sizeof(Session));\r
+    Session.Sscp = OpalDisk->Sscp;\r
+    Session.MediaId = OpalDisk->MediaId;\r
+    Session.OpalBaseComId = OpalDisk->OpalBaseComId;\r
+\r
     Ret = OpalSupportPsidRevert(&Session, Psid.Psid, (UINT32)sizeof(Psid.Psid), OpalDisk->OpalDevicePath);\r
   }\r
 \r
@@ -1095,8 +1064,6 @@ HiiPasswordEntered(
   UnicodeStrToAsciiStr(UniStr, Password);\r
   gBS->FreePool(UniStr);\r
 \r
-  DEBUG ((DEBUG_INFO, "Password: '%s'\n", Password));\r
-\r
   if (gHiiConfiguration.SelectedAction == HII_KEY_ID_GOTO_UNLOCK) {\r
     Status = HiiUnlock (OpalDisk, Password, PassLength);\r
   } else if (gHiiConfiguration.SelectedAction == HII_KEY_ID_GOTO_SECURE_ERASE) {\r
@@ -1135,8 +1102,6 @@ HiiSetBlockSid (
 \r
   Status = EFI_SUCCESS;\r
 \r
-  DEBUG ((DEBUG_INFO, "HiiSetBlockSid(enable: %x)\n", Enable));\r
-\r
   OpalExtraInfo.EnableBlockSid = Enable;\r
   DataSize = sizeof (OPAL_EXTRA_INFO_VAR);\r
   Status = gRT->SetVariable (\r
@@ -1146,7 +1111,6 @@ HiiSetBlockSid (
                  DataSize,\r
                  &OpalExtraInfo\r
                  );\r
-  DEBUG ((DEBUG_INFO, "SetVariable, Status: %r\n", Status));\r
 \r
   return Status;\r
 }\r
@@ -1177,7 +1141,6 @@ RouteConfig(
   EFI_STRING                              *Progress\r
   )\r
 {\r
-  DEBUG ((DEBUG_INFO,  "RouteConfig( )\n"));\r
   if (Configuration == NULL || Progress == NULL) {\r
     return (EFI_INVALID_PARAMETER);\r
   }\r
@@ -1222,8 +1185,6 @@ ExtractConfig(
 {\r
   EFI_STATUS                              Status;\r
 \r
-  DEBUG ((DEBUG_INFO,  "ExtractConfig( )\n"));\r
-\r
   //\r
   // Check for valid parameters\r
   //\r
@@ -1257,7 +1218,6 @@ OpalHiiSetBrowserData (
   VOID\r
   )\r
 {\r
-  DEBUG ((DEBUG_INFO,  "OpalHiiSetBrowserData( )\n"));\r
   HiiSetBrowserData(\r
       &gHiiSetupVariableGuid,\r
       (CHAR16*)L"OpalHiiConfig",\r
@@ -1278,7 +1238,6 @@ OpalHiiGetBrowserData (
   VOID\r
   )\r
 {\r
-  DEBUG ((DEBUG_INFO,  "OpalHiiGetBrowserData( )\n"));\r
   HiiGetBrowserData(\r
       &gHiiSetupVariableGuid,\r
       (CHAR16*)L"OpalHiiConfig",\r
@@ -1307,8 +1266,6 @@ HiiSetFormString(
   UINT32                    UniSize;\r
   CHAR16*                   UniStr;\r
 \r
-  DEBUG ((DEBUG_INFO,  "HiiSetFormString( )\n"));\r
-\r
   //\r
   // Determine the Length of the sting\r
   //\r