[NTOSKRNL]
authorAmine Khaldi <amine.khaldi@reactos.org>
Mon, 7 Oct 2013 12:08:33 +0000 (12:08 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Mon, 7 Oct 2013 12:08:33 +0000 (12:08 +0000)
* Fix several null pointer dereferences. CID 731608.
CORE-6681

svn path=/trunk/; revision=60572

reactos/ntoskrnl/mm/ARM3/sysldr.c

index 2afaae6..ce872bf 100644 (file)
@@ -1064,8 +1064,11 @@ MiResolveImageReferences(IN PVOID ImageBase,
         if ((GdiLink) && (NormalLink))
         {
             /* It's not, it's importing stuff it shouldn't be! */
         if ((GdiLink) && (NormalLink))
         {
             /* It's not, it's importing stuff it shouldn't be! */
-            MiDereferenceImports(LoadedImports);
-            if (LoadedImports) ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            if (LoadedImports)
+            {
+                MiDereferenceImports(LoadedImports);
+                ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            }
             return STATUS_PROCEDURE_NOT_FOUND;
         }
 
             return STATUS_PROCEDURE_NOT_FOUND;
         }
 
@@ -1078,8 +1081,11 @@ MiResolveImageReferences(IN PVOID ImageBase,
             !(_strnicmp(ImportName, "gdi32", sizeof("gdi32") - 1)))
         {
             /* This is not kernel code */
             !(_strnicmp(ImportName, "gdi32", sizeof("gdi32") - 1)))
         {
             /* This is not kernel code */
-            MiDereferenceImports(LoadedImports);
-            if (LoadedImports) ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            if (LoadedImports)
+            {
+                MiDereferenceImports(LoadedImports);
+                ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            }
             return STATUS_PROCEDURE_NOT_FOUND;
         }
 
             return STATUS_PROCEDURE_NOT_FOUND;
         }
 
@@ -1103,8 +1109,11 @@ MiResolveImageReferences(IN PVOID ImageBase,
         if (!NT_SUCCESS(Status))
         {
             /* Failed */
         if (!NT_SUCCESS(Status))
         {
             /* Failed */
-            MiDereferenceImports(LoadedImports);
-            if (LoadedImports) ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            if (LoadedImports)
+            {
+                MiDereferenceImports(LoadedImports);
+                ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            }
             return Status;
         }
 
             return Status;
         }
 
@@ -1226,8 +1235,11 @@ CheckDllState:
             {
                 /* Cleanup and return */
                 RtlFreeUnicodeString(&NameString);
             {
                 /* Cleanup and return */
                 RtlFreeUnicodeString(&NameString);
-                MiDereferenceImports(LoadedImports);
-                if (LoadedImports) ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+                if (LoadedImports)
+                {
+                    MiDereferenceImports(LoadedImports);
+                    ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+                }
                 return Status;
             }
 
                 return Status;
             }
 
@@ -1259,8 +1271,11 @@ CheckDllState:
         if (!ExportDirectory)
         {
             /* Cleanup and return */
         if (!ExportDirectory)
         {
             /* Cleanup and return */
-            MiDereferenceImports(LoadedImports);
-            if (LoadedImports) ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            if (LoadedImports)
+            {
+                MiDereferenceImports(LoadedImports);
+                ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+            }
             DPRINT1("Warning: Driver failed to load, %S not found\n", *MissingDriver);
             return STATUS_DRIVER_ENTRYPOINT_NOT_FOUND;
         }
             DPRINT1("Warning: Driver failed to load, %S not found\n", *MissingDriver);
             return STATUS_DRIVER_ENTRYPOINT_NOT_FOUND;
         }
@@ -1289,8 +1304,11 @@ CheckDllState:
                 if (!NT_SUCCESS(Status))
                 {
                     /* Cleanup and return */
                 if (!NT_SUCCESS(Status))
                 {
                     /* Cleanup and return */
-                    MiDereferenceImports(LoadedImports);
-                    if (LoadedImports) ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+                    if (LoadedImports)
+                    {
+                        MiDereferenceImports(LoadedImports);
+                        ExFreePoolWithTag(LoadedImports, TAG_LDR_IMPORTS);
+                    }
                     return Status;
                 }
 
                     return Status;
                 }