]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/HiiDatabaseDxe: Release lock on all error return path
authorDandan Bi <dandan.bi@intel.com>
Mon, 22 Apr 2019 01:33:59 +0000 (09:33 +0800)
committerLiming Gao <liming.gao@intel.com>
Wed, 24 Apr 2019 02:23:20 +0000 (10:23 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1652

Commit ffe5f7a6b4e9
"MdeModulePkg/HiiDatabase: Fix potential integer overflow "
added some new error paths, but it missed releasing the
mHiiDatabaseLock lock on those paths.
This patch releases mHiiDatabaseLock on those paths.

Cc: Hao Wu <hao.a.wu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
(cherry picked from commit 927c516f9557f2f36319fe5d2508af29e3375fb8)

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