Fix MmAllocatePageForMdl when it cannot allocate as much memory as requested. Modified: trunk/reactos/ntoskrnl/mm/mdl.c _____
Modified: trunk/reactos/ntoskrnl/mm/mdl.c --- trunk/reactos/ntoskrnl/mm/mdl.c 2005-01-14 14:11:13 UTC (rev 13041) +++ trunk/reactos/ntoskrnl/mm/mdl.c 2005-01-14 14:47:03 UTC (rev 13042) @@ -637,10 +637,9 @@
memory. When a driver wants to access physical memory described by a sub-MDL it must map the sub-MDL using MmGetSystemAddressForMdlSafe.
- Konstantin Gusev + Konstantin Gusev + */
-*/ - PMDL Mdl; PPFN_TYPE Pages; ULONG NumberOfPagesWanted, NumberOfPagesAllocated; @@ -652,7 +651,11 @@ SkipBytes.QuadPart, Totalbytes);
/* SkipBytes must be a multiple of the page size */ - ASSERT((SkipBytes.QuadPart % PAGE_SIZE) == 0); + if ((SkipBytes.QuadPart % PAGE_SIZE) != 0) + { + DPRINT1("Warning: SkipBytes is not a multiple of PAGE_SIZE\n"); + return NULL; + }
/* Allocate memory for the MDL */ Mdl = MmCreateMdl(NULL, 0, Totalbytes); @@ -690,6 +693,11 @@ ExFreePool(Mdl); Mdl = NULL; } + else if (NumberOfPagesWanted > 0) + { + Mdl->ByteCount = (ULONG)(NumberOfPagesAllocated * PAGE_SIZE); + /* FIXME: I don't know if Mdl->Size should also be changed -- blight */ + } return Mdl; }