summaryrefslogtreecommitdiff
path: root/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
diff options
context:
space:
mode:
Diffstat (limited to 'ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c')
-rw-r--r--ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c87
1 files changed, 50 insertions, 37 deletions
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
index b845d69..cb74983 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,13 @@ 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);
return (Status2);
}
@@ -431,6 +438,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);
}