[NTOSKRNL]

* Fix several null pointer dereferences. CID 731608.
CORE-6681

svn path=/trunk/; revision=60572
This commit is contained in:
Amine Khaldi 2013-10-07 12:08:33 +00:00
parent 96c8ce5d9d
commit 599e34cb17

View file

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