[NTOSKRNL] In FsRtlAddToTunnelCache() allocate memory from PagedPool when required.

Also, if allocating from lookaside list, reattempt a cold allocation.
This commit is contained in:
Pierre Schweitzer 2018-01-20 21:20:11 +01:00
parent cb8cc0d098
commit 2abb99faa9
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -346,7 +346,7 @@ FsRtlAddToTunnelCache(IN PTUNNEL Cache,
IN ULONG DataLength, IN ULONG DataLength,
IN PVOID Data) IN PVOID Data)
{ {
PTUNNEL_NODE_ENTRY NodeEntry; PTUNNEL_NODE_ENTRY NodeEntry = NULL;
PRTL_SPLAY_LINKS CurEntry, LastEntry; PRTL_SPLAY_LINKS CurEntry, LastEntry;
ULONG Length; ULONG Length;
LONG Result = 0; LONG Result = 0;
@ -384,23 +384,24 @@ FsRtlAddToTunnelCache(IN PTUNNEL Cache,
Length += LongName->Length; Length += LongName->Length;
} }
if (Length > DEFAULT_ENTRY_SIZE) if (Length <= DEFAULT_ENTRY_SIZE)
{
/* bigger than default entry */
NodeEntry = ExAllocatePool(NonPagedPool, Length);
AllocatedFromPool = TRUE;
}
else
{ {
/* get standard entry */ /* get standard entry */
NodeEntry = ExAllocateFromPagedLookasideList(&TunnelLookasideList); NodeEntry = ExAllocateFromPagedLookasideList(&TunnelLookasideList);
} }
/* check for success */ if (NodeEntry == NULL)
if (!NodeEntry)
{ {
/* out of memory */ /* bigger than default entry or allocation failed */
return; NodeEntry = ExAllocatePool(PagedPool | POOL_COLD_ALLOCATION, Length);
/* check for success */
if (NodeEntry == NULL)
{
/* out of memory */
return;
}
AllocatedFromPool = TRUE;
} }
/* acquire lock */ /* acquire lock */