Index: allocators.c =================================================================== --- allocators.c (revision 73854) +++ allocators.c (working copy) @@ -593,12 +593,18 @@ /* check the valid file alignment */ if (AllocatorFraming->FileAlignment > (PAGE_SIZE-1)) + { + FreeItem(AllocatorFraming); return STATUS_INVALID_PARAMETER; + } /* allocate allocator struct */ Allocator = AllocateItem(NonPagedPool, sizeof(ALLOCATOR)); if (!Allocator) + { + FreeItem(AllocatorFraming); return STATUS_INSUFFICIENT_RESOURCES; + } /* allocate object header */ @@ -605,8 +611,9 @@ Status = KsAllocateObjectHeader((KSOBJECT_HEADER*)&Allocator->Header, 0, NULL, Irp, &DispatchTable); if (!NT_SUCCESS(Status)) { - FreeItem(Allocator); - return Status; + FreeItem(AllocatorFraming); + FreeItem(Allocator); + return Status; } /* set allocator type in object header */ @@ -652,6 +659,7 @@ /* backup allocator framing */ RtlMoveMemory(&Allocator->Status.Framing, AllocatorFraming, sizeof(KSALLOCATOR_FRAMING)); + FreeItem(AllocatorFraming); return Status; }