diff options
author | Oliver Smith-Denny <osde@microsoft.com> | 2024-10-03 10:29:42 -0700 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2024-10-29 02:09:18 +0000 |
commit | c69e5e647d69fcbb6d2a4e5da82e72122d41566f (patch) | |
tree | 9515ca699182377c2de0d223be474769ccf2cbc0 | |
parent | 86d91f44548371b1f2f8f13f8cf8e5531d5d682a (diff) | |
download | edk2-c69e5e647d69fcbb6d2a4e5da82e72122d41566f.tar.gz |
ShellPkg: UefiShellDriver1CommandsLib: CodeQL Fixes
Includes changes across the module for the following CodeQL rules:
- cpp/comparison-with-wider-type
- cpp/overflow-buffer
- cpp/redundant-null-check-param
- cpp/uselesstest
Co-authored-by: Taylor Beebe <taylor.d.beebe@gmail.com>
Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
10 files changed, 259 insertions, 87 deletions
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);
- }
-
- if (ControllerHandleList != NULL) {
- FreePool (ControllerHandleList);
- }
+Done:
- 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);
|