From 192764dba9cb61621619cbfbcbfc49834079b8f8 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Tue, 17 Jul 2012 01:50:52 +0000 Subject: [PATCH] Update HobLib and Hob Service to avoid data over flow. Signed-off-by: Liming Gao Reviewed-by: Rui Sun git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13532 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Include/Library/HobLib.h | 8 +++++--- MdePkg/Library/DxeCoreHobLib/HobLib.c | 8 +++++--- MdePkg/Library/DxeHobLib/HobLib.c | 8 +++++--- MdePkg/Library/PeiHobLib/HobLib.c | 10 ++++++---- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/MdePkg/Include/Library/HobLib.h b/MdePkg/Include/Library/HobLib.h index 8af7fbe0e1..c990076a95 100644 --- a/MdePkg/Include/Library/HobLib.h +++ b/MdePkg/Include/Library/HobLib.h @@ -8,7 +8,7 @@ allows the PEI phase to pass information to the DXE phase. HOBs are position independent and can be relocated easily to different memory memory locations. -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -220,7 +220,8 @@ BuildResourceDescriptorHob ( If Guid is NULL, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param DataLength The size of the data payload for the GUID HOB. @@ -250,7 +251,8 @@ BuildGuidHob ( If Guid is NULL, then ASSERT(). If Data is NULL and DataLength > 0, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param Data The data to be copied into the data field of the GUID HOB. diff --git a/MdePkg/Library/DxeCoreHobLib/HobLib.c b/MdePkg/Library/DxeCoreHobLib/HobLib.c index 912f97d898..afa66b4f9d 100644 --- a/MdePkg/Library/DxeCoreHobLib/HobLib.c +++ b/MdePkg/Library/DxeCoreHobLib/HobLib.c @@ -1,7 +1,7 @@ /** @file HOB Library implementation for DxeCore driver. -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -281,7 +281,8 @@ BuildResourceDescriptorHob ( If Guid is NULL, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param DataLength The size of the data payload for the GUID HOB. @@ -318,7 +319,8 @@ BuildGuidHob ( If Guid is NULL, then ASSERT(). If Data is NULL and DataLength > 0, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param Data The data to be copied into the data field of the GUID HOB. diff --git a/MdePkg/Library/DxeHobLib/HobLib.c b/MdePkg/Library/DxeHobLib/HobLib.c index 3a015bb192..215436149d 100644 --- a/MdePkg/Library/DxeHobLib/HobLib.c +++ b/MdePkg/Library/DxeHobLib/HobLib.c @@ -1,7 +1,7 @@ /** @file HOB Library implemenation for Dxe Phase. -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -314,7 +314,8 @@ BuildResourceDescriptorHob ( If Guid is NULL, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param DataLength The size of the data payload for the GUID HOB. @@ -351,7 +352,8 @@ BuildGuidHob ( If Guid is NULL, then ASSERT(). If Data is NULL and DataLength > 0, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param Data The data to be copied into the data field of the GUID HOB. diff --git a/MdePkg/Library/PeiHobLib/HobLib.c b/MdePkg/Library/PeiHobLib/HobLib.c index 113de832fc..0586ba86c0 100644 --- a/MdePkg/Library/PeiHobLib/HobLib.c +++ b/MdePkg/Library/PeiHobLib/HobLib.c @@ -1,7 +1,7 @@ /** @file Provide Hob Library functions for Pei phase. -Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -349,7 +349,8 @@ BuildResourceDescriptorHob ( If Guid is NULL, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param DataLength The size of the data payload for the GUID HOB. @@ -375,7 +376,7 @@ BuildGuidHob ( // // Make sure that data length is not too long. // - ASSERT (DataLength <= (0xffff - sizeof (EFI_HOB_GUID_TYPE))); + ASSERT (DataLength <= (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE))); Hob = InternalPeiCreateHob (EFI_HOB_TYPE_GUID_EXTENSION, (UINT16) (sizeof (EFI_HOB_GUID_TYPE) + DataLength)); if (Hob == NULL) { @@ -399,7 +400,8 @@ BuildGuidHob ( If Guid is NULL, then ASSERT(). If Data is NULL and DataLength > 0, then ASSERT(). If there is no additional space for HOB creation, then ASSERT(). - If DataLength >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT(). + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is 0xFFF8. @param Guid The GUID to tag the customized HOB. @param Data The data to be copied into the data field of the GUID HOB. -- 2.39.2