]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/Image.c
MdeModulePkg/HiiDatabaseDxe: Release lock on all error return path
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / Image.c
index bd623cae152881c7190fafae69f85f3b1f383e22..a108fc6157a2cdf4df105cabc66ba20fbb4fbcc3 100644 (file)
@@ -2,7 +2,7 @@
 Implementation for EFI_HII_IMAGE_PROTOCOL.\r
 \r
 \r
-Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>\r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
@@ -653,6 +653,7 @@ HiiNewImage (
   //\r
   NewBlockSize = (UINT32)Image->Width * Image->Height;\r
   if (NewBlockSize > (MAX_UINT32 - (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))) / 3) {\r
+    EfiReleaseLock (&mHiiDatabaseLock);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
   NewBlockSize = NewBlockSize * 3 + (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL));\r
@@ -680,6 +681,7 @@ HiiNewImage (
     // Length of the package header is represented using 24 bits. So MAX length is MAX_UINT24.\r
     //\r
     if (NewBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length) {\r
+      EfiReleaseLock (&mHiiDatabaseLock);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     //\r
@@ -721,6 +723,7 @@ HiiNewImage (
     // Length of the package header is represented using 24 bits. So MAX length is MAX_UINT24.\r
     //\r
     if (NewBlockSize > MAX_UINT24 - (sizeof (EFI_HII_IMAGE_PACKAGE_HDR) + sizeof (EFI_HII_IIBT_END_BLOCK))) {\r
+      EfiReleaseLock (&mHiiDatabaseLock);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     //\r
@@ -1161,12 +1164,14 @@ HiiSetImage (
   //\r
   NewBlockSize = (UINT32)Image->Width * Image->Height;\r
   if (NewBlockSize > (MAX_UINT32 - (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))) / 3) {\r
+    EfiReleaseLock (&mHiiDatabaseLock);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
   NewBlockSize = NewBlockSize * 3 + (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL));\r
   if ((NewBlockSize > OldBlockSize) &&\r
       (NewBlockSize - OldBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length)\r
       ) {\r
+    EfiReleaseLock (&mHiiDatabaseLock);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r