MdeModulePkg/CapsuleApp: Fix potential NULL pointer dereference issue
authorChen A Chen <chen.a.chen@intel.com>
Fri, 1 Feb 2019 02:06:49 +0000 (10:06 +0800)
committerLiming Gao <liming.gao@intel.com>
Sat, 2 Feb 2019 13:41:20 +0000 (21:41 +0800)
To avoid potential NULL pointer dereference issue. Initialize them at
the beginning of the function.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao Wu <hao.a.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Chen A Chen <chen.a.chen@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
MdeModulePkg/Application/CapsuleApp/CapsuleDump.c
MdeModulePkg/Application/CapsuleApp/CapsuleOnDisk.c

index 896acd3..198a635 100644 (file)
@@ -916,8 +916,9 @@ UefiMain (
   EFI_GUID                      ImageTypeId;\r
   UINTN                         ImageIndex;\r
 \r
-  MapFsStr = NULL;\r
-  CapsuleNum = 0;\r
+  BlockDescriptors  = NULL;\r
+  MapFsStr          = NULL;\r
+  CapsuleNum        = 0;\r
 \r
   Status = GetArg();\r
   if (EFI_ERROR(Status)) {\r
index 5bf617c..7bef5a1 100644 (file)
@@ -795,11 +795,13 @@ DumpCapsuleFromDisk (
   UINTN                                         FileCount;\r
   BOOLEAN                                       NoFile;\r
 \r
-  DirHandle  = NULL;\r
-  FileHandle = NULL;\r
-  Index      = 0;\r
-  FileCount  = 0;\r
-  NoFile     = FALSE;\r
+  DirHandle       = NULL;\r
+  FileHandle      = NULL;\r
+  Index           = 0;\r
+  FileInfoBuffer  = NULL;\r
+  FileInfo        = NULL;\r
+  FileCount       = 0;\r
+  NoFile          = FALSE;\r
 \r
   Status = Fs->OpenVolume (Fs, &Root);\r
   if (EFI_ERROR (Status)) {\r
@@ -970,7 +972,10 @@ DumpProvisionedCapsule (
 \r
   ShellProtocol = GetShellProtocol ();\r
 \r
-  Index = 0;\r
+  Index             = 0;\r
+  CapsuleDataPtr64  = NULL;\r
+  BootNext          = NULL;\r
+  ShellProtocol     = NULL;\r
 \r
   //\r
   // Dump capsule provisioned on Memory\r
index 393b7ae..4faa863 100644 (file)
@@ -151,9 +151,14 @@ DumpAllEfiSysPartition (
   UINTN                      NumberEfiSystemPartitions;\r
   EFI_SHELL_PROTOCOL         *ShellProtocol;\r
 \r
-  ShellProtocol = GetShellProtocol ();\r
   NumberEfiSystemPartitions = 0;\r
 \r
+  ShellProtocol = GetShellProtocol ();\r
+  if (ShellProtocol == NULL) {\r
+    Print (L"Get Shell Protocol Fail\n");;\r
+    return ;\r
+  }\r
+\r
   Print (L"EFI System Partition list:\n");\r
 \r
   gBS->LocateHandleBuffer (\r
@@ -421,7 +426,13 @@ GetUpdateFileSystem (
   EFI_BOOT_MANAGER_LOAD_OPTION    NewOption;\r
 \r
   MappedDevicePath = NULL;\r
+  BootOptionBuffer = NULL;\r
+\r
   ShellProtocol = GetShellProtocol ();\r
+  if (ShellProtocol == NULL) {\r
+    Print (L"Get Shell Protocol Fail\n");;\r
+    return EFI_NOT_FOUND;\r
+  }\r
 \r
   //\r
   // 1. If Fs is not assigned and there are capsule provisioned before,\r
@@ -468,7 +479,9 @@ GetUpdateFileSystem (
   // 2. Get EFI system partition form boot options.\r
   //\r
   BootOptionBuffer = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot);\r
-  if (BootOptionCount == 0 && Map == NULL) {\r
+  if ( (BootOptionBuffer == NULL) ||\r
+       (BootOptionCount == 0 && Map == NULL)\r
+     ) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r