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>
This commit is contained in:
Oliver Smith-Denny 2024-10-03 10:29:42 -07:00 committed by mergify[bot]
parent 86d91f4454
commit c69e5e647d
10 changed files with 259 additions and 87 deletions

View File

@ -509,9 +509,18 @@ ShellCommandRunConnect (
if (Param1 != NULL) { if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE); Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
if (!EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);
} else { 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); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;
} }

View File

@ -195,6 +195,12 @@ ShellCommandRunDevTree (
Lang = ShellCommandLineGetValue (Package, L"-l"); Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) { if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang)); 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); AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else if (!ShellCommandLineGetFlag (Package, L"-l")) { } else if (!ShellCommandLineGetFlag (Package, L"-l")) {
ASSERT (Language == NULL); ASSERT (Language == NULL);
@ -212,6 +218,13 @@ ShellCommandRunDevTree (
Lang = ShellCommandLineGetRawValue (Package, 1); Lang = ShellCommandLineGetRawValue (Package, 1);
HiiString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DEV_TREE_OUTPUT), Language); 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) { if (Lang == NULL) {
for (LoopVar = 1; ; LoopVar++) { for (LoopVar = 1; ; LoopVar++) {
TheHandle = ConvertHandleIndexToHandle (LoopVar); TheHandle = ConvertHandleIndexToHandle (LoopVar);

View File

@ -190,6 +190,12 @@ ShellCommandRunDevices (
Lang = ShellCommandLineGetValue (Package, L"-l"); Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) { if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang)); 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); AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else if (!ShellCommandLineGetFlag (Package, L"-l")) { } else if (!ShellCommandLineGetFlag (Package, L"-l")) {
ASSERT (Language == NULL); ASSERT (Language == NULL);

View File

@ -218,7 +218,11 @@ GetDriverName (
return (EFI_NOT_FOUND); 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); Status = CompName2->GetDriverName (CompName2, Lang, &NameToReturn);
FreePool (Lang); FreePool (Lang);
@ -1142,6 +1146,12 @@ ShellCommandRunDh (
Lang = ShellCommandLineGetValue (Package, L"-l"); Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) { if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang)); 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); AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else { } else {
ASSERT (Language == NULL); ASSERT (Language == NULL);
@ -1151,6 +1161,12 @@ ShellCommandRunDh (
} }
} else { } else {
Language = AllocateZeroPool (10); 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"); AsciiSPrint (Language, 10, "en-us");
} }

View File

@ -98,7 +98,10 @@ ShellCommandRunDisconnect (
UINT64 Intermediate2; UINT64 Intermediate2;
UINT64 Intermediate3; 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...) // initialize the shell lib (we must be in non-auto-init...)
@ -160,25 +163,22 @@ ShellCommandRunDisconnect (
Param1 = ShellCommandLineGetRawValue (Package, 1); Param1 = ShellCommandLineGetRawValue (Package, 1);
Param2 = ShellCommandLineGetRawValue (Package, 2); Param2 = ShellCommandLineGetRawValue (Package, 2);
Param3 = ShellCommandLineGetRawValue (Package, 3); Param3 = ShellCommandLineGetRawValue (Package, 3);
if (Param1 != NULL) {
if (Param1 && !EFI_ERROR (ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE))) { ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE);
Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate1);
} else {
Handle1 = NULL;
} }
if (Param2 && !EFI_ERROR (ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE))) { Handle1 = Param1 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate1) : NULL;
Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate2); if (Param2 != NULL) {
} else { ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE);
Handle2 = NULL;
} }
if (Param3 && !EFI_ERROR (ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE))) { Handle2 = Param2 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate2) : NULL;
Handle3 = ConvertHandleIndexToHandle ((UINTN)Intermediate3); if (Param3 != NULL) {
} else { ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE);
Handle3 = NULL;
} }
Handle3 = Param3 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate3) : NULL;
if ((Param1 != NULL) && (Handle1 == NULL)) { if ((Param1 != NULL) && (Handle1 == NULL)) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1);
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;

View File

@ -327,6 +327,12 @@ ShellCommandRunDrivers (
Lang = ShellCommandLineGetValue (Package, L"-l"); Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) { if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang)); 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); AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else { } else {
ASSERT (Language == NULL); 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); HandleList = GetHandleListByProtocol (&gEfiDriverBindingProtocolGuid);
for (HandleWalker = HandleList; HandleWalker != NULL && *HandleWalker != NULL; HandleWalker++) { for (HandleWalker = HandleList; HandleWalker != NULL && *HandleWalker != NULL; HandleWalker++) {
ChildCount = 0; ChildCount = 0;
@ -382,6 +395,12 @@ ShellCommandRunDrivers (
TruncatedDriverName = NULL; TruncatedDriverName = NULL;
if (!SfoFlag && (FullDriverName != NULL)) { if (!SfoFlag && (FullDriverName != NULL)) {
TruncatedDriverName = AllocateZeroPool ((MAX_LEN_DRIVER_NAME + 1) * sizeof (CHAR16)); 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); StrnCpyS (TruncatedDriverName, MAX_LEN_DRIVER_NAME + 1, FullDriverName, MAX_LEN_DRIVER_NAME);
} }

View File

@ -236,7 +236,20 @@ ConfigToFile (
Status = HiiDatabase->ExportPackageLists (HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer); Status = HiiDatabase->ExportPackageLists (HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer);
if (Status == EFI_BUFFER_TOO_SMALL) { if (Status == EFI_BUFFER_TOO_SMALL) {
MainBuffer = AllocateZeroPool (MainBufferSize); 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); Status = ShellWriteFile (FileHandle, &MainBufferSize, MainBuffer);
@ -292,11 +305,13 @@ ConfigFromFile (
EFI_HII_PACKAGE_HEADER *PackageHeader; EFI_HII_PACKAGE_HEADER *PackageHeader;
EFI_DEVICE_PATH_PROTOCOL *DevPath; EFI_DEVICE_PATH_PROTOCOL *DevPath;
UINTN HandleIndex; UINTN HandleIndex;
SHELL_STATUS ShellStatus;
HiiDatabase = NULL; HiiDatabase = NULL;
MainBufferSize = 0; MainBufferSize = 0;
MainBuffer = NULL; MainBuffer = NULL;
FileHandle = NULL; FileHandle = NULL;
ShellStatus = SHELL_SUCCESS;
Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0); Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
@ -310,7 +325,9 @@ ConfigFromFile (
FileName, FileName,
Status Status
); );
return (SHELL_DEVICE_ERROR);
ShellStatus = SHELL_DEVICE_ERROR;
goto Done;
} }
// //
@ -333,8 +350,9 @@ ConfigFromFile (
L"EfiHiiDatabaseProtocol", L"EfiHiiDatabaseProtocol",
&gEfiHiiDatabaseProtocolGuid &gEfiHiiDatabaseProtocolGuid
); );
ShellCloseFile (&FileHandle);
return (SHELL_NOT_FOUND); ShellStatus = SHELL_NOT_FOUND;
goto Done;
} }
Status = ShellGetFileSize (FileHandle, &Temp); Status = ShellGetFileSize (FileHandle, &Temp);
@ -350,11 +368,25 @@ ConfigFromFile (
FileName FileName
); );
ShellCloseFile (&FileHandle); ShellStatus = SHELL_DEVICE_ERROR;
return (SHELL_DEVICE_ERROR); goto Done;
} }
MainBuffer = AllocateZeroPool ((UINTN)MainBufferSize); 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)) { if (EFI_ERROR (Status)) {
ShellPrintHiiEx ( ShellPrintHiiEx (
-1, -1,
@ -364,8 +396,9 @@ ConfigFromFile (
gShellDriver1HiiHandle, gShellDriver1HiiHandle,
L"drvcfg" L"drvcfg"
); );
ShellCloseFile (&FileHandle);
return (SHELL_DEVICE_ERROR); ShellStatus = SHELL_DEVICE_ERROR;
goto Done;
} }
Status = ShellReadFile (FileHandle, &MainBufferSize, MainBuffer); Status = ShellReadFile (FileHandle, &MainBufferSize, MainBuffer);
@ -380,12 +413,12 @@ ConfigFromFile (
FileName FileName
); );
ShellCloseFile (&FileHandle); ShellStatus = SHELL_DEVICE_ERROR;
SHELL_FREE_NON_NULL (MainBuffer); goto Done;
return (SHELL_DEVICE_ERROR);
} }
ShellCloseFile (&FileHandle); ShellCloseFile (&FileHandle);
FileHandle = NULL;
if (Handle != NULL) { if (Handle != NULL) {
// //
@ -404,8 +437,9 @@ ConfigFromFile (
ConvertHandleToHandleIndex (Handle), ConvertHandleToHandleIndex (Handle),
L"Device" L"Device"
); );
ShellCloseFile (&FileHandle);
return (SHELL_DEVICE_ERROR); ShellStatus = SHELL_DEVICE_ERROR;
goto Done;
} }
Status = HiiDatabase->UpdatePackageList (HiiDatabase, HiiHandle, MainBuffer); Status = HiiDatabase->UpdatePackageList (HiiDatabase, HiiHandle, MainBuffer);
@ -420,7 +454,9 @@ ConfigFromFile (
L"HiiDatabase->UpdatePackageList", L"HiiDatabase->UpdatePackageList",
Status Status
); );
return (SHELL_DEVICE_ERROR);
ShellStatus = SHELL_DEVICE_ERROR;
goto Done;
} }
} else { } else {
// //
@ -443,6 +479,20 @@ ConfigFromFile (
// print out an error. // print out an error.
// //
TempDevPathString = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *)(((CHAR8 *)PackageHeader) + sizeof (EFI_HII_PACKAGE_HEADER)), TRUE, TRUE); 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 ( ShellPrintHiiEx (
-1, -1,
-1, -1,
@ -465,7 +515,9 @@ ConfigFromFile (
L"HiiDatabase->UpdatePackageList", L"HiiDatabase->UpdatePackageList",
Status Status
); );
return (SHELL_DEVICE_ERROR);
ShellStatus = SHELL_DEVICE_ERROR;
goto Done;
} else { } else {
DevPath = (EFI_DEVICE_PATH_PROTOCOL *)(((CHAR8 *)PackageHeader) + sizeof (EFI_HII_PACKAGE_HEADER)); DevPath = (EFI_DEVICE_PATH_PROTOCOL *)(((CHAR8 *)PackageHeader) + sizeof (EFI_HII_PACKAGE_HEADER));
gBS->LocateDevicePath (&gEfiHiiConfigAccessProtocolGuid, &DevPath, &Handle); gBS->LocateDevicePath (&gEfiHiiConfigAccessProtocolGuid, &DevPath, &Handle);
@ -485,16 +537,24 @@ ConfigFromFile (
} }
} }
Done:
SHELL_FREE_NON_NULL (MainBuffer); SHELL_FREE_NON_NULL (MainBuffer);
ShellPrintHiiEx ( if (FileHandle != NULL) {
-1, ShellCloseFile (&FileHandle);
-1, }
NULL,
STRING_TOKEN (STR_DRVCFG_COMP), if (ShellStatus == SHELL_SUCCESS) {
gShellDriver1HiiHandle ShellPrintHiiEx (
); -1,
return (SHELL_SUCCESS); -1,
NULL,
STRING_TOKEN (STR_DRVCFG_COMP),
gShellDriver1HiiHandle
);
}
return ShellStatus;
} }
/** /**
@ -661,7 +721,12 @@ PreHiiDrvCfg (
// keep consistent with the above clause // keep consistent with the above clause
// //
DriverImageHandleBuffer = AllocatePool (sizeof (EFI_HANDLE)); DriverImageHandleBuffer = AllocatePool (sizeof (EFI_HANDLE));
ASSERT (DriverImageHandleBuffer); if (DriverImageHandleBuffer == NULL) {
ASSERT (DriverImageHandleBuffer);
ShellStatus = SHELL_OUT_OF_RESOURCES;
goto Done;
}
DriverImageHandleBuffer[0] = DriverImageHandle; DriverImageHandleBuffer[0] = DriverImageHandle;
} }
@ -1264,6 +1329,11 @@ ShellCommandRunDrvCfg (
Lang = ShellCommandLineGetValue (Package, L"-l"); Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) { if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang)); Language = AllocateZeroPool (StrSize (Lang));
if (Language == NULL) {
ShellStatus = SHELL_OUT_OF_RESOURCES;
goto Done;
}
AsciiSPrint (Language, StrSize (Lang), "%S", Lang); AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else if (ShellCommandLineGetFlag (Package, L"-l")) { } else if (ShellCommandLineGetFlag (Package, L"-l")) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", L"-l"); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", L"-l");
@ -1287,6 +1357,12 @@ ShellCommandRunDrvCfg (
FileName = NULL; FileName = NULL;
} }
if (FileName == NULL) {
ASSERT (FileName != NULL);
ShellStatus = SHELL_INVALID_PARAMETER;
goto Done;
}
if (InFromFile && EFI_ERROR (ShellFileExists (FileName))) { if (InFromFile && EFI_ERROR (ShellFileExists (FileName))) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, L"drvcfg", FileName); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, L"drvcfg", FileName);
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;

View File

@ -108,8 +108,8 @@ DoDiagnostics (
if (ControllerHandle != NULL) { if (ControllerHandle != NULL) {
ControllerHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE)); ControllerHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE));
if (ControllerHandleList == NULL) { if (ControllerHandleList == NULL) {
SHELL_FREE_NON_NULL (DriverHandleList); Status2 = EFI_OUT_OF_RESOURCES;
return EFI_OUT_OF_RESOURCES; goto Done;
} }
ControllerHandleList[0] = ControllerHandle; ControllerHandleList[0] = ControllerHandle;
@ -121,9 +121,8 @@ DoDiagnostics (
if (ChildHandle != NULL) { if (ChildHandle != NULL) {
ChildHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE)); ChildHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE));
if (ChildHandleList == NULL) { if (ChildHandleList == NULL) {
SHELL_FREE_NON_NULL (ControllerHandleList); Status2 = EFI_OUT_OF_RESOURCES;
SHELL_FREE_NON_NULL (DriverHandleList); goto Done;
return EFI_OUT_OF_RESOURCES;
} }
ChildHandleList[0] = ChildHandle; ChildHandleList[0] = ChildHandle;
@ -154,7 +153,7 @@ DoDiagnostics (
PARSE_HANDLE_DATABASE_DEVICES (DriverHandleList[DriverHandleListLoop], &ControllerHandleListCount, &ControllerHandleList); PARSE_HANDLE_DATABASE_DEVICES (DriverHandleList[DriverHandleListLoop], &ControllerHandleListCount, &ControllerHandleList);
} }
if (ControllerHandleListCount == 0) { if ((ControllerHandleListCount == 0) || (ControllerHandleList == NULL)) {
if (Mode == TestModeList) { if (Mode == TestModeList) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_NO_HANDLES), gShellDriver1HiiHandle); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_NO_HANDLES), gShellDriver1HiiHandle);
} }
@ -199,18 +198,24 @@ DoDiagnostics (
); );
if (!EFI_ERROR (Status) && (DriverDiagnostics2 != NULL)) { if (!EFI_ERROR (Status) && (DriverDiagnostics2 != NULL)) {
Language = GetBestLanguageForDriver (DriverDiagnostics2->SupportedLanguages, Lang, FALSE); Language = GetBestLanguageForDriver (DriverDiagnostics2->SupportedLanguages, Lang, FALSE);
Found = TRUE; if (Language == NULL) {
Status = DriverDiagnostics2->RunDiagnostics ( Status2 = EFI_NOT_FOUND;
DriverDiagnostics2, goto Done;
ControllerHandleList[ControllerHandleListLoop], }
ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop],
(EFI_DRIVER_DIAGNOSTIC_TYPE)Mode, Found = TRUE;
Language, Status = DriverDiagnostics2->RunDiagnostics (
&ErrorType, DriverDiagnostics2,
&OutBufferSize, ControllerHandleList[ControllerHandleListLoop],
&OutBuffer ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop],
); (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,
Language,
&ErrorType,
&OutBufferSize,
&OutBuffer
);
FreePool (Language); FreePool (Language);
Language = NULL;
} }
} }
@ -225,17 +230,23 @@ DoDiagnostics (
); );
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
Language = GetBestLanguageForDriver (DriverDiagnostics->SupportedLanguages, Lang, FALSE); Language = GetBestLanguageForDriver (DriverDiagnostics->SupportedLanguages, Lang, FALSE);
Status = DriverDiagnostics->RunDiagnostics ( if (Language == NULL) {
DriverDiagnostics, Status2 = EFI_NOT_FOUND;
ControllerHandleList[ControllerHandleListLoop], goto Done;
ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop], }
(EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,
Language, Status = DriverDiagnostics->RunDiagnostics (
&ErrorType, DriverDiagnostics,
&OutBufferSize, ControllerHandleList[ControllerHandleListLoop],
&OutBuffer ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop],
); (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,
Language,
&ErrorType,
&OutBufferSize,
&OutBuffer
);
FreePool (Language); FreePool (Language);
Language = NULL;
} }
} }
@ -307,17 +318,14 @@ DoDiagnostics (
} }
} }
if (DriverHandleList != NULL) { Done:
FreePool (DriverHandleList);
}
if (ControllerHandleList != NULL) { SHELL_FREE_NON_NULL (DriverHandleList);
FreePool (ControllerHandleList); SHELL_FREE_NON_NULL (ControllerHandleList);
} SHELL_FREE_NON_NULL (ChildHandleList);
SHELL_FREE_NON_NULL (Language);
if (ChildHandleList != NULL) { SHELL_FREE_NON_NULL (OutBuffer);
FreePool (ChildHandleList); SHELL_FREE_NON_NULL (ErrorType);
}
return (Status2); return (Status2);
} }
@ -359,9 +367,10 @@ ShellCommandRunDrvDiag (
EFI_HANDLE Handle3; EFI_HANDLE Handle3;
UINT64 Intermediate; UINT64 Intermediate;
ShellStatus = SHELL_SUCCESS; Intermediate = 0;
Mode = TestModeMax; ShellStatus = SHELL_SUCCESS;
Language = NULL; Mode = TestModeMax;
Language = NULL;
// //
// initialize the shell lib (we must be in non-auto-init...) // initialize the shell lib (we must be in non-auto-init...)
@ -431,6 +440,12 @@ ShellCommandRunDrvDiag (
return (SHELL_INVALID_PARAMETER); return (SHELL_INVALID_PARAMETER);
} else if (Lang != NULL) { } else if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang)); 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); AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} }

View File

@ -25,6 +25,7 @@ STATIC CONST CHAR16 StringUnknown[] = L"Unknown ";
@retval EFI_SUCCESS The operation was successful. @retval EFI_SUCCESS The operation was successful.
@retval EFI_INVALID_PARAMETER TheHandle was NULL. @retval EFI_INVALID_PARAMETER TheHandle was NULL.
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.
**/ **/
EFI_STATUS EFI_STATUS
TraverseHandleDatabase ( TraverseHandleDatabase (
@ -102,10 +103,16 @@ TraverseHandleDatabase (
break; 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); Name = GetStringNameFromHandle (OpenInfo[OpenInfoIndex].AgentHandle, NULL);
ControllerIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].ControllerHandle); ControllerIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].ControllerHandle);
if (ControllerIndex != 0) { if ((ControllerIndex != 0) && (Name != NULL)) {
ShellPrintHiiEx ( ShellPrintHiiEx (
-1, -1,
-1, -1,
@ -118,7 +125,7 @@ TraverseHandleDatabase (
OpenTypeString, OpenTypeString,
Name Name
); );
} else { } else if (Name != NULL) {
ShellPrintHiiEx ( ShellPrintHiiEx (
-1, -1,
-1, -1,
@ -199,13 +206,21 @@ ShellCommandRunOpenInfo (
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;
} else { } else {
Param1 = ShellCommandLineGetRawValue (Package, 1); 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)) { if (EFI_ERROR (Status) || (Param1 == NULL) || (ConvertHandleIndexToHandle ((UINTN)Intermediate) == NULL)) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;
} else { } else {
TheHandle = ConvertHandleIndexToHandle ((UINTN)Intermediate); 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); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, (UINTN)Intermediate, TheHandle);
Status = TraverseHandleDatabase (TheHandle); Status = TraverseHandleDatabase (TheHandle);

View File

@ -25,6 +25,9 @@ DumpLoadedImageProtocolInfo (
CHAR16 *TheString; CHAR16 *TheString;
TheString = GetProtocolInformationDump (TheHandle, &gEfiLoadedImageProtocolGuid, TRUE); TheString = GetProtocolInformationDump (TheHandle, &gEfiLoadedImageProtocolGuid, TRUE);
if (TheString == NULL) {
return (EFI_INVALID_PARAMETER);
}
ShellPrintEx (-1, -1, L"%s", TheString); ShellPrintEx (-1, -1, L"%s", TheString);