From 599e34cb17429b845fbb02665570cce6ca92d714 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 7 Oct 2013 12:08:33 +0000 Subject: [PATCH] [NTOSKRNL] * Fix several null pointer dereferences. CID 731608. CORE-6681 svn path=/trunk/; revision=60572 --- reactos/ntoskrnl/mm/ARM3/sysldr.c | 42 ++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/sysldr.c b/reactos/ntoskrnl/mm/ARM3/sysldr.c index 2afaae6c725..ce872bf62df 100644 --- a/reactos/ntoskrnl/mm/ARM3/sysldr.c +++ b/reactos/ntoskrnl/mm/ARM3/sysldr.c @@ -1064,8 +1064,11 @@ MiResolveImageReferences(IN PVOID ImageBase, 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; } @@ -1078,8 +1081,11 @@ MiResolveImageReferences(IN PVOID ImageBase, !(_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; } @@ -1103,8 +1109,11 @@ MiResolveImageReferences(IN PVOID ImageBase, 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; } @@ -1226,8 +1235,11 @@ CheckDllState: { /* 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; } @@ -1259,8 +1271,11 @@ CheckDllState: 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; } @@ -1289,8 +1304,11 @@ CheckDllState: 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; }