]> xenbits.xensource.com Git - ovmf.git/commitdiff
ShellPkg: Fix conditionally uninitialized variables
authorMichael Kubacki <michael.kubacki@microsoft.com>
Tue, 8 Nov 2022 20:35:39 +0000 (15:35 -0500)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 3 Apr 2023 15:29:08 +0000 (15:29 +0000)
Fixes CodeQL alerts for CWE-457:
https://cwe.mitre.org/data/definitions/457.html

Cc: Erich McMillan <emcmillan@microsoft.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Michael Kubacki <mikuback@linux.microsoft.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Co-authored-by: Erich McMillan <emcmillan@microsoft.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
Reviewed-by: Oliver Smith-Denny <osd@smith-denny.com>
ShellPkg/Application/Shell/Shell.c
ShellPkg/Application/Shell/ShellProtocol.c
ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c
ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c

index 0ae6e14a34bfcb65936516913acf9088c5e7b3fe..f95c799bb2a4f8f2fc2fd0ad3567d9b3c4aaa968 100644 (file)
@@ -1300,6 +1300,7 @@ DoStartupScript (
   CHAR16         *FullFileStringPath;\r
   UINTN          NewSize;\r
 \r
+  CalleeStatus    = EFI_SUCCESS;\r
   Key.UnicodeChar = CHAR_NULL;\r
   Key.ScanCode    = 0;\r
 \r
index e6d20ab16479e34654c3a8c907a426f9791ccdd8..da8c31cb038aa36c0cfb78a5e28d97446df8e1fb 100644 (file)
@@ -735,50 +735,52 @@ EfiShellGetDeviceName (
     //\r
     // Now check the parent controller using this as the child.\r
     //\r
-    if (DeviceNameToReturn == NULL) {\r
-      PARSE_HANDLE_DATABASE_PARENTS (DeviceHandle, &ParentControllerCount, &ParentControllerBuffer);\r
+    Status = PARSE_HANDLE_DATABASE_PARENTS (DeviceHandle, &ParentControllerCount, &ParentControllerBuffer);\r
+    if ((DeviceNameToReturn == NULL) && !EFI_ERROR (Status)) {\r
       for (LoopVar = 0; LoopVar < ParentControllerCount; LoopVar++) {\r
-        PARSE_HANDLE_DATABASE_UEFI_DRIVERS (ParentControllerBuffer[LoopVar], &ParentDriverCount, &ParentDriverBuffer);\r
-        for (HandleCount = 0; HandleCount < ParentDriverCount; HandleCount++) {\r
-          //\r
-          // try using that driver's component name with controller and our driver as the child.\r
-          //\r
-          Status = gBS->OpenProtocol (\r
-                          ParentDriverBuffer[HandleCount],\r
-                          &gEfiComponentName2ProtocolGuid,\r
-                          (VOID **)&CompName2,\r
-                          gImageHandle,\r
-                          NULL,\r
-                          EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                          );\r
-          if (EFI_ERROR (Status)) {\r
+        Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (ParentControllerBuffer[LoopVar], &ParentDriverCount, &ParentDriverBuffer);\r
+        if (!EFI_ERROR (Status)) {\r
+          for (HandleCount = 0; HandleCount < ParentDriverCount; HandleCount++) {\r
+            //\r
+            // try using that driver's component name with controller and our driver as the child.\r
+            //\r
             Status = gBS->OpenProtocol (\r
                             ParentDriverBuffer[HandleCount],\r
-                            &gEfiComponentNameProtocolGuid,\r
+                            &gEfiComponentName2ProtocolGuid,\r
                             (VOID **)&CompName2,\r
                             gImageHandle,\r
                             NULL,\r
                             EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                             );\r
-          }\r
+            if (EFI_ERROR (Status)) {\r
+              Status = gBS->OpenProtocol (\r
+                              ParentDriverBuffer[HandleCount],\r
+                              &gEfiComponentNameProtocolGuid,\r
+                              (VOID **)&CompName2,\r
+                              gImageHandle,\r
+                              NULL,\r
+                              EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                              );\r
+            }\r
 \r
-          if (EFI_ERROR (Status)) {\r
-            continue;\r
+            if (EFI_ERROR (Status)) {\r
+              continue;\r
+            }\r
+\r
+            Lang   = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, FALSE);\r
+            Status = CompName2->GetControllerName (CompName2, ParentControllerBuffer[LoopVar], DeviceHandle, Lang, &DeviceNameToReturn);\r
+            FreePool (Lang);\r
+            Lang = NULL;\r
+            if (!EFI_ERROR (Status) && (DeviceNameToReturn != NULL)) {\r
+              break;\r
+            }\r
           }\r
 \r
-          Lang   = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, FALSE);\r
-          Status = CompName2->GetControllerName (CompName2, ParentControllerBuffer[LoopVar], DeviceHandle, Lang, &DeviceNameToReturn);\r
-          FreePool (Lang);\r
-          Lang = NULL;\r
+          SHELL_FREE_NON_NULL (ParentDriverBuffer);\r
           if (!EFI_ERROR (Status) && (DeviceNameToReturn != NULL)) {\r
             break;\r
           }\r
         }\r
-\r
-        SHELL_FREE_NON_NULL (ParentDriverBuffer);\r
-        if (!EFI_ERROR (Status) && (DeviceNameToReturn != NULL)) {\r
-          break;\r
-        }\r
       }\r
 \r
       SHELL_FREE_NON_NULL (ParentControllerBuffer);\r
index 36cf46fb2c38e95d8a951d733ae7e2f7fea610f9..4549cbde9b9ac1ea5ae88c8c5a5527fd4d781753 100644 (file)
@@ -1399,10 +1399,11 @@ ShellCommandCreateInitialMappingsAndPaths (
   CHAR16                    *MapName;\r
   SHELL_MAP_LIST            *MapListItem;\r
 \r
-  SplitCurDir = NULL;\r
-  MapName     = NULL;\r
-  MapListItem = NULL;\r
-  HandleList  = NULL;\r
+  ConsistMappingTable = NULL;\r
+  SplitCurDir         = NULL;\r
+  MapName             = NULL;\r
+  MapListItem         = NULL;\r
+  HandleList          = NULL;\r
 \r
   //\r
   // Reset the static members back to zero\r
@@ -1458,32 +1459,35 @@ ShellCommandCreateInitialMappingsAndPaths (
     //\r
     PerformQuickSort (DevicePathList, Count, sizeof (EFI_DEVICE_PATH_PROTOCOL *), DevicePathCompare);\r
 \r
-    ShellCommandConsistMappingInitialize (&ConsistMappingTable);\r
-    //\r
-    // Assign new Mappings to all...\r
-    //\r
-    for (Count = 0; HandleList[Count] != NULL; Count++) {\r
-      //\r
-      // Get default name first\r
-      //\r
-      NewDefaultName = ShellCommandCreateNewMappingName (MappingTypeFileSystem);\r
-      ASSERT (NewDefaultName != NULL);\r
-      Status = ShellCommandAddMapItemAndUpdatePath (NewDefaultName, DevicePathList[Count], 0, TRUE);\r
-      ASSERT_EFI_ERROR (Status);\r
-      FreePool (NewDefaultName);\r
-\r
+    if (!EFI_ERROR (ShellCommandConsistMappingInitialize (&ConsistMappingTable))) {\r
       //\r
-      // Now do consistent name\r
+      // Assign new Mappings to all...\r
       //\r
-      NewConsistName = ShellCommandConsistMappingGenMappingName (DevicePathList[Count], ConsistMappingTable);\r
-      if (NewConsistName != NULL) {\r
-        Status = ShellCommandAddMapItemAndUpdatePath (NewConsistName, DevicePathList[Count], 0, FALSE);\r
+      for (Count = 0; HandleList[Count] != NULL; Count++) {\r
+        //\r
+        // Get default name first\r
+        //\r
+        NewDefaultName = ShellCommandCreateNewMappingName (MappingTypeFileSystem);\r
+        ASSERT (NewDefaultName != NULL);\r
+        Status = ShellCommandAddMapItemAndUpdatePath (NewDefaultName, DevicePathList[Count], 0, TRUE);\r
         ASSERT_EFI_ERROR (Status);\r
-        FreePool (NewConsistName);\r
+        FreePool (NewDefaultName);\r
+\r
+        //\r
+        // Now do consistent name\r
+        //\r
+        NewConsistName = ShellCommandConsistMappingGenMappingName (DevicePathList[Count], ConsistMappingTable);\r
+        if (NewConsistName != NULL) {\r
+          Status = ShellCommandAddMapItemAndUpdatePath (NewConsistName, DevicePathList[Count], 0, FALSE);\r
+          ASSERT_EFI_ERROR (Status);\r
+          FreePool (NewConsistName);\r
+        }\r
       }\r
     }\r
 \r
-    ShellCommandConsistMappingUnInitialize (ConsistMappingTable);\r
+    if (ConsistMappingTable != NULL) {\r
+      ShellCommandConsistMappingUnInitialize (ConsistMappingTable);\r
+    }\r
 \r
     SHELL_FREE_NON_NULL (HandleList);\r
     SHELL_FREE_NON_NULL (DevicePathList);\r
@@ -1626,12 +1630,12 @@ ShellCommandUpdateMapping (
     //\r
     PerformQuickSort (DevicePathList, Count, sizeof (EFI_DEVICE_PATH_PROTOCOL *), DevicePathCompare);\r
 \r
-    ShellCommandConsistMappingInitialize (&ConsistMappingTable);\r
+    Status = ShellCommandConsistMappingInitialize (&ConsistMappingTable);\r
 \r
     //\r
     // Assign new Mappings to remainders\r
     //\r
-    for (Count = 0; !EFI_ERROR (Status) && HandleList[Count] != NULL && !EFI_ERROR (Status); Count++) {\r
+    for (Count = 0; !EFI_ERROR (Status) && HandleList[Count] != NULL; Count++) {\r
       //\r
       // Skip ones that already have\r
       //\r
index 97a4b57a932fdd7b66e60ef2ba6e11880efbb53c..5329b559ba46c013bd386185e902c826fee03b6b 100644 (file)
@@ -158,7 +158,10 @@ ShellCommandRunDblk (
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
 \r
-        ShellConvertStringToUint64 (LbaString, &Lba, TRUE, FALSE);\r
+        if (EFI_ERROR (ShellConvertStringToUint64 (LbaString, &Lba, TRUE, FALSE))) {\r
+          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", LbaString);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
       }\r
 \r
       if (BlockCountString == NULL) {\r
@@ -169,12 +172,13 @@ ShellCommandRunDblk (
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
 \r
-        ShellConvertStringToUint64 (BlockCountString, &BlockCount, TRUE, FALSE);\r
-        if (BlockCount > 0x10) {\r
-          BlockCount = 0x10;\r
-        } else if (BlockCount == 0) {\r
-          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString);\r
-          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        if (!EFI_ERROR (ShellConvertStringToUint64 (BlockCountString, &BlockCount, TRUE, FALSE))) {\r
+          if (BlockCount > 0x10) {\r
+            BlockCount = 0x10;\r
+          } else if (BlockCount == 0) {\r
+            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString);\r
+            ShellStatus = SHELL_INVALID_PARAMETER;\r
+          }\r
         }\r
       }\r
 \r
index 8bf23a2076a13b74426b920a324dcdc7b2fc8abd..72f8c087cb6984ca44fa191c3273179e66d8a504 100644 (file)
@@ -112,10 +112,13 @@ ShellCommandRunEfiDecompress (
 \r
         if (ShellStatus == SHELL_SUCCESS) {\r
           Status = FileHandleGetSize (InFileHandle, &Temp64Bit);\r
-          ASSERT (Temp64Bit <= (UINT32)(-1));\r
-          InSize = (UINTN)Temp64Bit;\r
           ASSERT_EFI_ERROR (Status);\r
-          InBuffer = AllocateZeroPool (InSize);\r
+          if (!EFI_ERROR (Status)) {\r
+            ASSERT (Temp64Bit <= (UINT32)(-1));\r
+            InSize   = (UINTN)Temp64Bit;\r
+            InBuffer = AllocateZeroPool (InSize);\r
+          }\r
+\r
           if (InBuffer == NULL) {\r
             Status = EFI_OUT_OF_RESOURCES;\r
           } else {\r
index d7a133c0c5b4c0baad96da097bce2443262c360d..870c5b0d1da7e87dbab9231e6b29d24d1abca91e 100644 (file)
@@ -508,9 +508,10 @@ ShellCommandRunConnect (
       Count  = ShellCommandLineGetCount (Package);\r
 \r
       if (Param1 != NULL) {\r
-        Status  = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);\r
-        Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
-        if (EFI_ERROR (Status)) {\r
+        Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);\r
+        if (!EFI_ERROR (Status)) {\r
+          Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
+        } else {\r
           ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
@@ -519,9 +520,10 @@ ShellCommandRunConnect (
       }\r
 \r
       if (Param2 != NULL) {\r
-        Status  = ShellConvertStringToUint64 (Param2, &Intermediate, TRUE, FALSE);\r
-        Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
-        if (EFI_ERROR (Status)) {\r
+        Status = ShellConvertStringToUint64 (Param2, &Intermediate, TRUE, FALSE);\r
+        if (!EFI_ERROR (Status)) {\r
+          Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
+        } else {\r
           ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
index 009ae5282b2796470f159bb56f38d5b935fd3395..fd49d1f7ceb4ed007d0987f87961d23ad0725c95 100644 (file)
@@ -160,12 +160,17 @@ ShellCommandRunDisconnect (
         Param1 = ShellCommandLineGetRawValue (Package, 1);\r
         Param2 = ShellCommandLineGetRawValue (Package, 2);\r
         Param3 = ShellCommandLineGetRawValue (Package, 3);\r
-        ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE);\r
-        Handle1 = Param1 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate1) : NULL;\r
-        ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE);\r
-        Handle2 = Param2 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate2) : NULL;\r
-        ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE);\r
-        Handle3 = Param3 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate3) : NULL;\r
+        if (!EFI_ERROR (ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE))) {\r
+          Handle1 = Param1 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate1) : NULL;\r
+        }\r
+\r
+        if (!EFI_ERROR (ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE))) {\r
+          Handle2 = Param2 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate2) : NULL;\r
+        }\r
+\r
+        if (!EFI_ERROR (ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE))) {\r
+          Handle3 = Param3 != NULL ? ConvertHandleIndexToHandle ((UINTN)Intermediate3) : NULL;\r
+        }\r
 \r
         if ((Param1 != NULL) && (Handle1 == NULL)) {\r
           ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1);\r
index c645c9fd688258418eeb898dfde51f04ec65ad8b..b845d694b26911eeb718317aa1a984d25fc7d2b5 100644 (file)
@@ -438,25 +438,22 @@ ShellCommandRunDrvDiag (
     ControllerHandleStr = ShellCommandLineGetRawValue (Package, 2);\r
     ChildHandleStr      = ShellCommandLineGetRawValue (Package, 3);\r
 \r
-    if (DriverHandleStr == NULL) {\r
-      Handle1 = NULL;\r
-    } else {\r
-      ShellConvertStringToUint64 (DriverHandleStr, &Intermediate, TRUE, FALSE);\r
+    if ((DriverHandleStr != NULL) && !EFI_ERROR (ShellConvertStringToUint64 (DriverHandleStr, &Intermediate, TRUE, FALSE))) {\r
       Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
+    } else {\r
+      Handle1 = NULL;\r
     }\r
 \r
-    if (ControllerHandleStr == NULL) {\r
-      Handle2 = NULL;\r
-    } else {\r
-      ShellConvertStringToUint64 (ControllerHandleStr, &Intermediate, TRUE, FALSE);\r
+    if ((ControllerHandleStr != NULL) && !EFI_ERROR (ShellConvertStringToUint64 (ControllerHandleStr, &Intermediate, TRUE, FALSE))) {\r
       Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
+    } else {\r
+      Handle2 = NULL;\r
     }\r
 \r
-    if (ChildHandleStr == NULL) {\r
-      Handle3 = NULL;\r
-    } else {\r
-      ShellConvertStringToUint64 (ChildHandleStr, &Intermediate, TRUE, FALSE);\r
+    if ((ChildHandleStr != NULL) && !EFI_ERROR (ShellConvertStringToUint64 (ChildHandleStr, &Intermediate, TRUE, FALSE))) {\r
       Handle3 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
+    } else {\r
+      Handle3 = NULL;\r
     }\r
 \r
     Status = DoDiagnostics (\r