BaseTools/GenFw: Avoid possible NULL pointer dereference

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Hao Wu 2016-10-11 10:20:14 +08:00
parent 2224702134
commit 06b4573598
4 changed files with 39 additions and 4 deletions

View File

@ -167,6 +167,10 @@ InitializeElf32 (
// Create COFF Section offset buffer and zero. // Create COFF Section offset buffer and zero.
// //
mCoffSectionsOffset = (UINT32 *)malloc(mEhdr->e_shnum * sizeof (UINT32)); mCoffSectionsOffset = (UINT32 *)malloc(mEhdr->e_shnum * sizeof (UINT32));
if (mCoffSectionsOffset == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
return FALSE;
}
memset(mCoffSectionsOffset, 0, mEhdr->e_shnum * sizeof(UINT32)); memset(mCoffSectionsOffset, 0, mEhdr->e_shnum * sizeof(UINT32));
// //
@ -526,6 +530,10 @@ ScanSections32 (
// Allocate base Coff file. Will be expanded later for relocations. // Allocate base Coff file. Will be expanded later for relocations.
// //
mCoffFile = (UINT8 *)malloc(mCoffOffset); mCoffFile = (UINT8 *)malloc(mCoffOffset);
if (mCoffFile == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
}
assert (mCoffFile != NULL);
memset(mCoffFile, 0, mCoffOffset); memset(mCoffFile, 0, mCoffOffset);
// //

View File

@ -1,7 +1,7 @@
/** @file /** @file
Elf64 convert solution Elf64 convert solution
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR> Portions copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available This program and the accompanying materials are licensed and made available
@ -172,6 +172,10 @@ InitializeElf64 (
// //
VerboseMsg ("Create COFF Section Offset Buffer"); VerboseMsg ("Create COFF Section Offset Buffer");
mCoffSectionsOffset = (UINT32 *)malloc(mEhdr->e_shnum * sizeof (UINT32)); mCoffSectionsOffset = (UINT32 *)malloc(mEhdr->e_shnum * sizeof (UINT32));
if (mCoffSectionsOffset == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
return FALSE;
}
memset(mCoffSectionsOffset, 0, mEhdr->e_shnum * sizeof(UINT32)); memset(mCoffSectionsOffset, 0, mEhdr->e_shnum * sizeof(UINT32));
// //
@ -518,6 +522,10 @@ ScanSections64 (
// Allocate base Coff file. Will be expanded later for relocations. // Allocate base Coff file. Will be expanded later for relocations.
// //
mCoffFile = (UINT8 *)malloc(mCoffOffset); mCoffFile = (UINT8 *)malloc(mCoffOffset);
if (mCoffFile == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
}
assert (mCoffFile != NULL);
memset(mCoffFile, 0, mCoffOffset); memset(mCoffFile, 0, mCoffOffset);
// //

View File

@ -1,7 +1,7 @@
/** @file /** @file
Elf convert solution Elf convert solution
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available This program and the accompanying materials are licensed and made available
under the terms and conditions of the BSD License which accompanies this under the terms and conditions of the BSD License which accompanies this
@ -24,6 +24,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <ctype.h> #include <ctype.h>
#include <assert.h>
#include <Common/UefiBaseTypes.h> #include <Common/UefiBaseTypes.h>
#include <IndustryStandard/PeImage.h> #include <IndustryStandard/PeImage.h>
@ -98,6 +99,10 @@ CoffAddFixup(
mCoffFile, mCoffFile,
mCoffOffset + sizeof(EFI_IMAGE_BASE_RELOCATION) + 2 * MAX_COFF_ALIGNMENT mCoffOffset + sizeof(EFI_IMAGE_BASE_RELOCATION) + 2 * MAX_COFF_ALIGNMENT
); );
if (mCoffFile == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
}
assert (mCoffFile != NULL);
memset ( memset (
mCoffFile + mCoffOffset, 0, mCoffFile + mCoffOffset, 0,
sizeof(EFI_IMAGE_BASE_RELOCATION) + 2 * MAX_COFF_ALIGNMENT sizeof(EFI_IMAGE_BASE_RELOCATION) + 2 * MAX_COFF_ALIGNMENT

View File

@ -625,6 +625,10 @@ PeCoffConvertImageToXip (
// Allocate the extra space that we need to grow the image // Allocate the extra space that we need to grow the image
// //
XipFile = malloc (XipLength); XipFile = malloc (XipLength);
if (XipFile == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
return;
}
memset (XipFile, 0, XipLength); memset (XipFile, 0, XipLength);
// //
@ -701,6 +705,10 @@ Returns:
+ 3 * (sizeof (UINT16) + 3 * sizeof (CHAR16)) + 3 * (sizeof (UINT16) + 3 * sizeof (CHAR16))
+ sizeof (EFI_IMAGE_RESOURCE_DATA_ENTRY); + sizeof (EFI_IMAGE_RESOURCE_DATA_ENTRY);
HiiSectionHeader = malloc (HiiSectionHeaderSize); HiiSectionHeader = malloc (HiiSectionHeaderSize);
if (HiiSectionHeader == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
return NULL;
}
memset (HiiSectionHeader, 0, HiiSectionHeaderSize); memset (HiiSectionHeader, 0, HiiSectionHeaderSize);
HiiSectionOffset = 0; HiiSectionOffset = 0;
@ -1693,6 +1701,10 @@ Returns:
// Create the resource section header // Create the resource section header
// //
HiiSectionHeader = CreateHiiResouceSectionHeader (&HiiSectionHeaderSize, HiiPackageListHeader.PackageLength); HiiSectionHeader = CreateHiiResouceSectionHeader (&HiiSectionHeaderSize, HiiPackageListHeader.PackageLength);
if (HiiSectionHeader == NULL) {
free (HiiPackageListBuffer);
goto Finish;
}
// //
// Wrtie section header and HiiData into File. // Wrtie section header and HiiData into File.
// //
@ -3028,8 +3040,10 @@ Returns:
} }
ptime = localtime (&newtime); ptime = localtime (&newtime);
DebugMsg (NULL, 0, 9, "New Image Time Stamp", "%04d-%02d-%02d %02d:%02d:%02d", if (ptime != NULL) {
ptime->tm_year + 1900, ptime->tm_mon + 1, ptime->tm_mday, ptime->tm_hour, ptime->tm_min, ptime->tm_sec); DebugMsg (NULL, 0, 9, "New Image Time Stamp", "%04d-%02d-%02d %02d:%02d:%02d",
ptime->tm_year + 1900, ptime->tm_mon + 1, ptime->tm_mday, ptime->tm_hour, ptime->tm_min, ptime->tm_sec);
}
// //
// Set new time and data into PeImage. // Set new time and data into PeImage.
// //