From cbdd109b43c8386d74a7bb40d892e5c2485f71f9 Mon Sep 17 00:00:00 2001 From: jcarsey Date: Mon, 4 Apr 2011 21:41:24 +0000 Subject: check memory allocations for success. check pointer before access. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11503 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiShellLevel2CommandsLib.uni | Bin 111056 -> 111268 bytes ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c | 54 ++++++++++++--------- 2 files changed, 31 insertions(+), 23 deletions(-) (limited to 'ShellPkg/Library/UefiShellLevel2CommandsLib') diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni index f9c11811da..428d8ddaec 100644 Binary files a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni and b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni differ diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c index 51cf33f1ba..9300d5ec35 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c @@ -113,14 +113,20 @@ HandleVol( Size2 = StrSize(SysInfo->VolumeLabel); if (Size1 > Size2) { SysInfo = ReallocatePool((UINTN)SysInfo->Size, (UINTN)SysInfo->Size + Size1 - Size2, SysInfo); + if (SysInfo == NULL) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellLevel2HiiHandle); + ShellStatus = SHELL_OUT_OF_RESOURCES; + } + } + if (SysInfo != NULL) { + StrCpy ((CHAR16 *) SysInfo->VolumeLabel, Name); + SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + Size1; + Status = EfiFpHandle->SetInfo( + EfiFpHandle, + &gEfiFileSystemInfoGuid, + (UINTN)SysInfo->Size, + SysInfo); } - StrCpy ((CHAR16 *) SysInfo->VolumeLabel, Name); - SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + Size1; - Status = EfiFpHandle->SetInfo( - EfiFpHandle, - &gEfiFileSystemInfoGuid, - (UINTN)SysInfo->Size, - SysInfo); } FreePool(SysInfo); @@ -154,22 +160,24 @@ HandleVol( ASSERT(SysInfo != NULL); - // - // print VolumeInfo table - // - ShellPrintHiiEx ( - 0, - gST->ConOut->Mode->CursorRow, - NULL, - STRING_TOKEN (STR_VOL_VOLINFO), - gShellLevel2HiiHandle, - SysInfo->VolumeLabel, - SysInfo->ReadOnly?L"r":L"rw", - SysInfo->VolumeSize, - SysInfo->FreeSpace, - SysInfo->BlockSize - ); - SHELL_FREE_NON_NULL(SysInfo); + if (SysInfo != NULL) { + // + // print VolumeInfo table + // + ShellPrintHiiEx ( + 0, + gST->ConOut->Mode->CursorRow, + NULL, + STRING_TOKEN (STR_VOL_VOLINFO), + gShellLevel2HiiHandle, + SysInfo->VolumeLabel, + SysInfo->ReadOnly?L"r":L"rw", + SysInfo->VolumeSize, + SysInfo->FreeSpace, + SysInfo->BlockSize + ); + SHELL_FREE_NON_NULL(SysInfo); + } return (ShellStatus); } -- cgit v1.2.3