From: Pierre Schweitzer Date: Sat, 20 Jan 2018 20:20:11 +0000 (+0100) Subject: [NTOSKRNL] In FsRtlAddToTunnelCache() allocate memory from PagedPool when required. X-Git-Tag: 0.4.9-dev~289 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=2abb99faa95ba50a352d690fdfa767c87d59af91;ds=sidebyside [NTOSKRNL] In FsRtlAddToTunnelCache() allocate memory from PagedPool when required. Also, if allocating from lookaside list, reattempt a cold allocation. --- diff --git a/ntoskrnl/fsrtl/tunnel.c b/ntoskrnl/fsrtl/tunnel.c index 727f467ddfd..545cf2f2144 100644 --- a/ntoskrnl/fsrtl/tunnel.c +++ b/ntoskrnl/fsrtl/tunnel.c @@ -346,7 +346,7 @@ FsRtlAddToTunnelCache(IN PTUNNEL Cache, IN ULONG DataLength, IN PVOID Data) { - PTUNNEL_NODE_ENTRY NodeEntry; + PTUNNEL_NODE_ENTRY NodeEntry = NULL; PRTL_SPLAY_LINKS CurEntry, LastEntry; ULONG Length; LONG Result = 0; @@ -384,23 +384,24 @@ FsRtlAddToTunnelCache(IN PTUNNEL Cache, Length += LongName->Length; } - if (Length > DEFAULT_ENTRY_SIZE) - { - /* bigger than default entry */ - NodeEntry = ExAllocatePool(NonPagedPool, Length); - AllocatedFromPool = TRUE; - } - else + if (Length <= DEFAULT_ENTRY_SIZE) { /* get standard entry */ NodeEntry = ExAllocateFromPagedLookasideList(&TunnelLookasideList); } - /* check for success */ - if (!NodeEntry) + if (NodeEntry == NULL) { - /* out of memory */ - return; + /* bigger than default entry or allocation failed */ + NodeEntry = ExAllocatePool(PagedPool | POOL_COLD_ALLOCATION, Length); + /* check for success */ + if (NodeEntry == NULL) + { + /* out of memory */ + return; + } + + AllocatedFromPool = TRUE; } /* acquire lock */