]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
MdeModulePkg: Add the alignment check for FTW spare area address and length, and...
[mirror_edk2.git] / MdeModulePkg / Universal / FaultTolerantWriteDxe / FtwMisc.c
index fdd9dfa0c17a30f5c146dac3516ee49361323250..b3352bbe070d03510200ae69bf0f96cf89fceb65 100644 (file)
@@ -1111,6 +1111,20 @@ FindFvbForFtw (
               ASSERT (FALSE);\r
               return EFI_ABORTED;\r
             }\r
+            //\r
+            // Check the alignment of spare area address and length, they should be block size aligned\r
+            //\r
+            if (((FtwDevice->SpareAreaAddress & (FtwDevice->BlockSize - 1)) != 0) ||\r
+                ((FtwDevice->SpareAreaLength & (FtwDevice->BlockSize - 1)) != 0)) {\r
+              DEBUG ((EFI_D_ERROR, "Ftw: Spare area address or length is not block size aligned\n"));\r
+              FreePool (HandleBuffer);\r
+              //\r
+              // Report Status Code EFI_SW_EC_ABORTED.\r
+              //\r
+              REPORT_STATUS_CODE (  (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED), (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ABORTED));\r
+              ASSERT (FALSE);\r
+              CpuDeadLoop ();\r
+            }\r
             break;\r
           }\r
         }\r
@@ -1118,12 +1132,12 @@ FindFvbForFtw (
     }\r
   }\r
   FreePool (HandleBuffer);\r
\r
+\r
   if ((FtwDevice->FtwBackupFvb == NULL) || (FtwDevice->FtwFvBlock == NULL) ||\r
     (FtwDevice->FtwWorkSpaceLba == (EFI_LBA) (-1)) || (FtwDevice->FtwSpareLba == (EFI_LBA) (-1))) {\r
     return EFI_ABORTED;\r
   }\r
-    \r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r