mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-24 06:04:52 +02:00
MdeModulePkg/HiiDatabaseDxe: Release lock on all error return path
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)
This commit is contained in:
parent
2c0d39ac47
commit
ab7e02a4f8
@ -2,7 +2,7 @@
|
|||||||
Implementation for EFI_HII_IMAGE_PROTOCOL.
|
Implementation for EFI_HII_IMAGE_PROTOCOL.
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -653,6 +653,7 @@ HiiNewImage (
|
|||||||
//
|
//
|
||||||
NewBlockSize = (UINT32)Image->Width * Image->Height;
|
NewBlockSize = (UINT32)Image->Width * Image->Height;
|
||||||
if (NewBlockSize > (MAX_UINT32 - (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))) / 3) {
|
if (NewBlockSize > (MAX_UINT32 - (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))) / 3) {
|
||||||
|
EfiReleaseLock (&mHiiDatabaseLock);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
NewBlockSize = NewBlockSize * 3 + (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL));
|
NewBlockSize = NewBlockSize * 3 + (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL));
|
||||||
@ -680,6 +681,7 @@ HiiNewImage (
|
|||||||
// Length of the package header is represented using 24 bits. So MAX length is MAX_UINT24.
|
// Length of the package header is represented using 24 bits. So MAX length is MAX_UINT24.
|
||||||
//
|
//
|
||||||
if (NewBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length) {
|
if (NewBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length) {
|
||||||
|
EfiReleaseLock (&mHiiDatabaseLock);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@ -721,6 +723,7 @@ HiiNewImage (
|
|||||||
// Length of the package header is represented using 24 bits. So MAX length is MAX_UINT24.
|
// Length of the package header is represented using 24 bits. So MAX length is MAX_UINT24.
|
||||||
//
|
//
|
||||||
if (NewBlockSize > MAX_UINT24 - (sizeof (EFI_HII_IMAGE_PACKAGE_HDR) + sizeof (EFI_HII_IIBT_END_BLOCK))) {
|
if (NewBlockSize > MAX_UINT24 - (sizeof (EFI_HII_IMAGE_PACKAGE_HDR) + sizeof (EFI_HII_IIBT_END_BLOCK))) {
|
||||||
|
EfiReleaseLock (&mHiiDatabaseLock);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@ -1161,12 +1164,14 @@ HiiSetImage (
|
|||||||
//
|
//
|
||||||
NewBlockSize = (UINT32)Image->Width * Image->Height;
|
NewBlockSize = (UINT32)Image->Width * Image->Height;
|
||||||
if (NewBlockSize > (MAX_UINT32 - (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))) / 3) {
|
if (NewBlockSize > (MAX_UINT32 - (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))) / 3) {
|
||||||
|
EfiReleaseLock (&mHiiDatabaseLock);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
NewBlockSize = NewBlockSize * 3 + (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL));
|
NewBlockSize = NewBlockSize * 3 + (sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL));
|
||||||
if ((NewBlockSize > OldBlockSize) &&
|
if ((NewBlockSize > OldBlockSize) &&
|
||||||
(NewBlockSize - OldBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length)
|
(NewBlockSize - OldBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length)
|
||||||
) {
|
) {
|
||||||
|
EfiReleaseLock (&mHiiDatabaseLock);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user