diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c index 870c5b0d1d..4f398632fb 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c @@ -509,9 +509,18 @@ ShellCommandRunConnect ( if (Param1 != NULL) { Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE); - if (!EFI_ERROR (Status)) { - Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate); - } else { + if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1); + ShellStatus = SHELL_INVALID_PARAMETER; + if (Package != NULL) { + ShellCommandLineFreeVarList (Package); + } + + return (ShellStatus); + } + + Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate); + if (EFI_ERROR (Status)) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1); ShellStatus = SHELL_INVALID_PARAMETER; } diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/DevTree.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/DevTree.c index ddf063713c..3f14560fda 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/DevTree.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/DevTree.c @@ -195,6 +195,12 @@ ShellCommandRunDevTree ( Lang = ShellCommandLineGetValue (Package, L"-l"); if (Lang != NULL) { Language = AllocateZeroPool (StrSize (Lang)); + if (Language == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"devtree"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + AsciiSPrint (Language, StrSize (Lang), "%S", Lang); } else if (!ShellCommandLineGetFlag (Package, L"-l")) { ASSERT (Language == NULL); @@ -212,6 +218,13 @@ ShellCommandRunDevTree ( Lang = ShellCommandLineGetRawValue (Package, 1); HiiString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DEV_TREE_OUTPUT), Language); + if (HiiString == NULL) { + ASSERT (HiiString != NULL); + SHELL_FREE_NON_NULL (Language); + ShellCommandLineFreeVarList (Package); + return (SHELL_INVALID_PARAMETER); + } + if (Lang == NULL) { for (LoopVar = 1; ; LoopVar++) { TheHandle = ConvertHandleIndexToHandle (LoopVar); diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c index e175cad192..0225b1a6d3 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c @@ -190,6 +190,12 @@ ShellCommandRunDevices ( Lang = ShellCommandLineGetValue (Package, L"-l"); if (Lang != NULL) { Language = AllocateZeroPool (StrSize (Lang)); + if (Language == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"devices"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + AsciiSPrint (Language, StrSize (Lang), "%S", Lang); } else if (!ShellCommandLineGetFlag (Package, L"-l")) { ASSERT (Language == NULL); diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c index d17d50fe13..f8ddb51ab6 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c @@ -218,7 +218,11 @@ GetDriverName ( return (EFI_NOT_FOUND); } - Lang = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, FALSE); + Lang = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, FALSE); + if (Lang == NULL) { + return (EFI_NOT_FOUND); + } + Status = CompName2->GetDriverName (CompName2, Lang, &NameToReturn); FreePool (Lang); @@ -1142,6 +1146,12 @@ ShellCommandRunDh ( Lang = ShellCommandLineGetValue (Package, L"-l"); if (Lang != NULL) { Language = AllocateZeroPool (StrSize (Lang)); + if (Language == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"dh"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + AsciiSPrint (Language, StrSize (Lang), "%S", Lang); } else { ASSERT (Language == NULL); @@ -1151,6 +1161,12 @@ ShellCommandRunDh ( } } else { Language = AllocateZeroPool (10); + if (Language == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"dh"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + AsciiSPrint (Language, 10, "en-us"); } diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c index fac6463e3c..2204abacc1 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c @@ -98,7 +98,10 @@ ShellCommandRunDisconnect ( UINT64 Intermediate2; UINT64 Intermediate3; - ShellStatus = SHELL_SUCCESS; + Intermediate1 = 0; + Intermediate2 = 0; + Intermediate3 = 0; + ShellStatus = SHELL_SUCCESS; // // initialize the shell lib (we must be in non-auto-init...) @@ -160,25 +163,22 @@ ShellCommandRunDisconnect ( Param1 = ShellCommandLineGetRawValue (Package, 1); Param2 = ShellCommandLineGetRawValue (Package, 2); Param3 = ShellCommandLineGetRawValue (Package, 3); - - if (Param1 && !EFI_ERROR (ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE))) { - Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate1); - } else { - Handle1 = NULL; + if (Param1 != NULL) { + ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE); } - if (Param2 && !EFI_ERROR (ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE))) { - Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate2); - } else { - Handle2 = NULL; + Handle1 = Param1 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate1) : NULL; + if (Param2 != NULL) { + ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE); } - if (Param3 && !EFI_ERROR (ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE))) { - Handle3 = ConvertHandleIndexToHandle ((UINTN)Intermediate3); - } else { - Handle3 = NULL; + Handle2 = Param2 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate2) : NULL; + if (Param3 != NULL) { + ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE); } + Handle3 = Param3 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate3) : NULL; + if ((Param1 != NULL) && (Handle1 == NULL)) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1); ShellStatus = SHELL_INVALID_PARAMETER; diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c index 2773039caa..78484aebf6 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c @@ -327,6 +327,12 @@ ShellCommandRunDrivers ( Lang = ShellCommandLineGetValue (Package, L"-l"); if (Lang != NULL) { Language = AllocateZeroPool (StrSize (Lang)); + if (Language == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + AsciiSPrint (Language, StrSize (Lang), "%S", Lang); } else { ASSERT (Language == NULL); @@ -364,6 +370,13 @@ ShellCommandRunDrivers ( ); } + if (FormatString == NULL) { + // Assume the string is present because it is hard-coded and report out of memory + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + HandleList = GetHandleListByProtocol (&gEfiDriverBindingProtocolGuid); for (HandleWalker = HandleList; HandleWalker != NULL && *HandleWalker != NULL; HandleWalker++) { ChildCount = 0; @@ -382,6 +395,12 @@ ShellCommandRunDrivers ( TruncatedDriverName = NULL; if (!SfoFlag && (FullDriverName != NULL)) { TruncatedDriverName = AllocateZeroPool ((MAX_LEN_DRIVER_NAME + 1) * sizeof (CHAR16)); + if (TruncatedDriverName == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + StrnCpyS (TruncatedDriverName, MAX_LEN_DRIVER_NAME + 1, FullDriverName, MAX_LEN_DRIVER_NAME); } diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvCfg.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvCfg.c index 9bbbb1444d..158a3bb800 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvCfg.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvCfg.c @@ -236,7 +236,20 @@ ConfigToFile ( Status = HiiDatabase->ExportPackageLists (HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer); if (Status == EFI_BUFFER_TOO_SMALL) { MainBuffer = AllocateZeroPool (MainBufferSize); - Status = HiiDatabase->ExportPackageLists (HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer); + if (MainBuffer == NULL) { + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_OUT_MEM), + gShellDriver1HiiHandle, + L"drvcfg" + ); + ShellCloseFile (&FileHandle); + return (SHELL_OUT_OF_RESOURCES); + } + + Status = HiiDatabase->ExportPackageLists (HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer); } Status = ShellWriteFile (FileHandle, &MainBufferSize, MainBuffer); @@ -292,11 +305,13 @@ ConfigFromFile ( EFI_HII_PACKAGE_HEADER *PackageHeader; EFI_DEVICE_PATH_PROTOCOL *DevPath; UINTN HandleIndex; + SHELL_STATUS ShellStatus; HiiDatabase = NULL; MainBufferSize = 0; MainBuffer = NULL; FileHandle = NULL; + ShellStatus = SHELL_SUCCESS; Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0); if (EFI_ERROR (Status)) { @@ -310,7 +325,9 @@ ConfigFromFile ( FileName, Status ); - return (SHELL_DEVICE_ERROR); + + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } // @@ -333,8 +350,9 @@ ConfigFromFile ( L"EfiHiiDatabaseProtocol", &gEfiHiiDatabaseProtocolGuid ); - ShellCloseFile (&FileHandle); - return (SHELL_NOT_FOUND); + + ShellStatus = SHELL_NOT_FOUND; + goto Done; } Status = ShellGetFileSize (FileHandle, &Temp); @@ -350,11 +368,25 @@ ConfigFromFile ( FileName ); - ShellCloseFile (&FileHandle); - return (SHELL_DEVICE_ERROR); + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } MainBuffer = AllocateZeroPool ((UINTN)MainBufferSize); + if (MainBuffer == NULL) { + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_OUT_MEM), + gShellDriver1HiiHandle, + L"drvcfg" + ); + + ShellStatus = SHELL_OUT_OF_RESOURCES; + goto Done; + } + if (EFI_ERROR (Status)) { ShellPrintHiiEx ( -1, @@ -364,8 +396,9 @@ ConfigFromFile ( gShellDriver1HiiHandle, L"drvcfg" ); - ShellCloseFile (&FileHandle); - return (SHELL_DEVICE_ERROR); + + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } Status = ShellReadFile (FileHandle, &MainBufferSize, MainBuffer); @@ -380,12 +413,12 @@ ConfigFromFile ( FileName ); - ShellCloseFile (&FileHandle); - SHELL_FREE_NON_NULL (MainBuffer); - return (SHELL_DEVICE_ERROR); + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } ShellCloseFile (&FileHandle); + FileHandle = NULL; if (Handle != NULL) { // @@ -404,8 +437,9 @@ ConfigFromFile ( ConvertHandleToHandleIndex (Handle), L"Device" ); - ShellCloseFile (&FileHandle); - return (SHELL_DEVICE_ERROR); + + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } Status = HiiDatabase->UpdatePackageList (HiiDatabase, HiiHandle, MainBuffer); @@ -420,7 +454,9 @@ ConfigFromFile ( L"HiiDatabase->UpdatePackageList", Status ); - return (SHELL_DEVICE_ERROR); + + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } } else { // @@ -443,6 +479,20 @@ ConfigFromFile ( // print out an error. // TempDevPathString = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *)(((CHAR8 *)PackageHeader) + sizeof (EFI_HII_PACKAGE_HEADER)), TRUE, TRUE); + if (TempDevPathString == NULL) { + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_OUT_MEM), + gShellDriver1HiiHandle, + L"drvcfg" + ); + + ShellStatus = SHELL_OUT_OF_RESOURCES; + goto Done; + } + ShellPrintHiiEx ( -1, -1, @@ -465,7 +515,9 @@ ConfigFromFile ( L"HiiDatabase->UpdatePackageList", Status ); - return (SHELL_DEVICE_ERROR); + + ShellStatus = SHELL_DEVICE_ERROR; + goto Done; } else { DevPath = (EFI_DEVICE_PATH_PROTOCOL *)(((CHAR8 *)PackageHeader) + sizeof (EFI_HII_PACKAGE_HEADER)); gBS->LocateDevicePath (&gEfiHiiConfigAccessProtocolGuid, &DevPath, &Handle); @@ -485,16 +537,24 @@ ConfigFromFile ( } } +Done: SHELL_FREE_NON_NULL (MainBuffer); - ShellPrintHiiEx ( - -1, - -1, - NULL, - STRING_TOKEN (STR_DRVCFG_COMP), - gShellDriver1HiiHandle - ); - return (SHELL_SUCCESS); + if (FileHandle != NULL) { + ShellCloseFile (&FileHandle); + } + + if (ShellStatus == SHELL_SUCCESS) { + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_DRVCFG_COMP), + gShellDriver1HiiHandle + ); + } + + return ShellStatus; } /** @@ -661,7 +721,12 @@ PreHiiDrvCfg ( // keep consistent with the above clause // DriverImageHandleBuffer = AllocatePool (sizeof (EFI_HANDLE)); - ASSERT (DriverImageHandleBuffer); + if (DriverImageHandleBuffer == NULL) { + ASSERT (DriverImageHandleBuffer); + ShellStatus = SHELL_OUT_OF_RESOURCES; + goto Done; + } + DriverImageHandleBuffer[0] = DriverImageHandle; } @@ -1264,6 +1329,11 @@ ShellCommandRunDrvCfg ( Lang = ShellCommandLineGetValue (Package, L"-l"); if (Lang != NULL) { Language = AllocateZeroPool (StrSize (Lang)); + if (Language == NULL) { + ShellStatus = SHELL_OUT_OF_RESOURCES; + goto Done; + } + AsciiSPrint (Language, StrSize (Lang), "%S", Lang); } else if (ShellCommandLineGetFlag (Package, L"-l")) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", L"-l"); @@ -1287,6 +1357,12 @@ ShellCommandRunDrvCfg ( FileName = NULL; } + if (FileName == NULL) { + ASSERT (FileName != NULL); + ShellStatus = SHELL_INVALID_PARAMETER; + goto Done; + } + if (InFromFile && EFI_ERROR (ShellFileExists (FileName))) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, L"drvcfg", FileName); ShellStatus = SHELL_INVALID_PARAMETER; diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c index b845d694b2..9235e7f40b 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c @@ -108,8 +108,8 @@ DoDiagnostics ( if (ControllerHandle != NULL) { ControllerHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE)); if (ControllerHandleList == NULL) { - SHELL_FREE_NON_NULL (DriverHandleList); - return EFI_OUT_OF_RESOURCES; + Status2 = EFI_OUT_OF_RESOURCES; + goto Done; } ControllerHandleList[0] = ControllerHandle; @@ -121,9 +121,8 @@ DoDiagnostics ( if (ChildHandle != NULL) { ChildHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE)); if (ChildHandleList == NULL) { - SHELL_FREE_NON_NULL (ControllerHandleList); - SHELL_FREE_NON_NULL (DriverHandleList); - return EFI_OUT_OF_RESOURCES; + Status2 = EFI_OUT_OF_RESOURCES; + goto Done; } ChildHandleList[0] = ChildHandle; @@ -154,7 +153,7 @@ DoDiagnostics ( PARSE_HANDLE_DATABASE_DEVICES (DriverHandleList[DriverHandleListLoop], &ControllerHandleListCount, &ControllerHandleList); } - if (ControllerHandleListCount == 0) { + if ((ControllerHandleListCount == 0) || (ControllerHandleList == NULL)) { if (Mode == TestModeList) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_NO_HANDLES), gShellDriver1HiiHandle); } @@ -199,18 +198,24 @@ DoDiagnostics ( ); if (!EFI_ERROR (Status) && (DriverDiagnostics2 != NULL)) { Language = GetBestLanguageForDriver (DriverDiagnostics2->SupportedLanguages, Lang, FALSE); - Found = TRUE; - Status = DriverDiagnostics2->RunDiagnostics ( - DriverDiagnostics2, - ControllerHandleList[ControllerHandleListLoop], - ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop], - (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode, - Language, - &ErrorType, - &OutBufferSize, - &OutBuffer - ); + if (Language == NULL) { + Status2 = EFI_NOT_FOUND; + goto Done; + } + + Found = TRUE; + Status = DriverDiagnostics2->RunDiagnostics ( + DriverDiagnostics2, + ControllerHandleList[ControllerHandleListLoop], + ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop], + (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode, + Language, + &ErrorType, + &OutBufferSize, + &OutBuffer + ); FreePool (Language); + Language = NULL; } } @@ -225,17 +230,23 @@ DoDiagnostics ( ); if (!EFI_ERROR (Status)) { Language = GetBestLanguageForDriver (DriverDiagnostics->SupportedLanguages, Lang, FALSE); - Status = DriverDiagnostics->RunDiagnostics ( - DriverDiagnostics, - ControllerHandleList[ControllerHandleListLoop], - ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop], - (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode, - Language, - &ErrorType, - &OutBufferSize, - &OutBuffer - ); + if (Language == NULL) { + Status2 = EFI_NOT_FOUND; + goto Done; + } + + Status = DriverDiagnostics->RunDiagnostics ( + DriverDiagnostics, + ControllerHandleList[ControllerHandleListLoop], + ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop], + (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode, + Language, + &ErrorType, + &OutBufferSize, + &OutBuffer + ); FreePool (Language); + Language = NULL; } } @@ -307,17 +318,14 @@ DoDiagnostics ( } } - if (DriverHandleList != NULL) { - FreePool (DriverHandleList); - } +Done: - if (ControllerHandleList != NULL) { - FreePool (ControllerHandleList); - } - - if (ChildHandleList != NULL) { - FreePool (ChildHandleList); - } + SHELL_FREE_NON_NULL (DriverHandleList); + SHELL_FREE_NON_NULL (ControllerHandleList); + SHELL_FREE_NON_NULL (ChildHandleList); + SHELL_FREE_NON_NULL (Language); + SHELL_FREE_NON_NULL (OutBuffer); + SHELL_FREE_NON_NULL (ErrorType); return (Status2); } @@ -359,9 +367,10 @@ ShellCommandRunDrvDiag ( EFI_HANDLE Handle3; UINT64 Intermediate; - ShellStatus = SHELL_SUCCESS; - Mode = TestModeMax; - Language = NULL; + Intermediate = 0; + ShellStatus = SHELL_SUCCESS; + Mode = TestModeMax; + Language = NULL; // // initialize the shell lib (we must be in non-auto-init...) @@ -431,6 +440,12 @@ ShellCommandRunDrvDiag ( return (SHELL_INVALID_PARAMETER); } else if (Lang != NULL) { Language = AllocateZeroPool (StrSize (Lang)); + if (Language == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drvdiag"); + ShellCommandLineFreeVarList (Package); + return (SHELL_OUT_OF_RESOURCES); + } + AsciiSPrint (Language, StrSize (Lang), "%S", Lang); } diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c index a1a0904658..262063c64e 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c @@ -25,6 +25,7 @@ STATIC CONST CHAR16 StringUnknown[] = L"Unknown "; @retval EFI_SUCCESS The operation was successful. @retval EFI_INVALID_PARAMETER TheHandle was NULL. + @retval EFI_OUT_OF_RESOURCES A memory allocation failed. **/ EFI_STATUS TraverseHandleDatabase ( @@ -102,10 +103,16 @@ TraverseHandleDatabase ( break; } - HandleIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].AgentHandle); + HandleIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].AgentHandle); + if (HandleIndex == 0) { + FreePool (OpenInfo); + FreePool (ProtocolGuidArray); + return EFI_OUT_OF_RESOURCES; + } + Name = GetStringNameFromHandle (OpenInfo[OpenInfoIndex].AgentHandle, NULL); ControllerIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].ControllerHandle); - if (ControllerIndex != 0) { + if ((ControllerIndex != 0) && (Name != NULL)) { ShellPrintHiiEx ( -1, -1, @@ -118,7 +125,7 @@ TraverseHandleDatabase ( OpenTypeString, Name ); - } else { + } else if (Name != NULL) { ShellPrintHiiEx ( -1, -1, @@ -199,13 +206,21 @@ ShellCommandRunOpenInfo ( ShellStatus = SHELL_INVALID_PARAMETER; } else { Param1 = ShellCommandLineGetRawValue (Package, 1); - Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE); + if (Param1 != NULL) { + Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE); + } + if (EFI_ERROR (Status) || (Param1 == NULL) || (ConvertHandleIndexToHandle ((UINTN)Intermediate) == NULL)) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1); ShellStatus = SHELL_INVALID_PARAMETER; } else { TheHandle = ConvertHandleIndexToHandle ((UINTN)Intermediate); - ASSERT (TheHandle != NULL); + if (TheHandle == NULL) { + ASSERT (TheHandle != NULL); + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1); + return SHELL_INVALID_PARAMETER; + } + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, (UINTN)Intermediate, TheHandle); Status = TraverseHandleDatabase (TheHandle); diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c index 1dd947c177..02e8ee2a02 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c @@ -25,6 +25,9 @@ DumpLoadedImageProtocolInfo ( CHAR16 *TheString; TheString = GetProtocolInformationDump (TheHandle, &gEfiLoadedImageProtocolGuid, TRUE); + if (TheString == NULL) { + return (EFI_INVALID_PARAMETER); + } ShellPrintEx (-1, -1, L"%s", TheString);