From 9f67c346522f7bddb7b3949001c80b324dfd0d5e Mon Sep 17 00:00:00 2001 From: Sir Richard Date: Wed, 10 Feb 2010 03:59:17 +0000 Subject: [PATCH] [NTOS]: Allow registry configuration of large kernel stack size, with proper checks. svn path=/trunk/; revision=45548 --- reactos/ntoskrnl/mm/ARM3/i386/init.c | 22 ++++++++++++++++++++++ reactos/ntoskrnl/mm/ARM3/mminit.c | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/ARM3/i386/init.c b/reactos/ntoskrnl/mm/ARM3/i386/init.c index 7c9ca592cf1..41b15734fb2 100644 --- a/reactos/ntoskrnl/mm/ARM3/i386/init.c +++ b/reactos/ntoskrnl/mm/ARM3/i386/init.c @@ -74,7 +74,29 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) PVOID NonPagedPoolExpansionVa; ULONG OldCount, L2Associativity; PFN_NUMBER FreePage, FreePageCount, PagesLeft, BasePage, PageCount; + + /* Check for kernel stack size that's too big */ + if (MmLargeStackSize > (KERNEL_LARGE_STACK_SIZE / 1024)) + { + /* Sanitize to default value */ + MmLargeStackSize = KERNEL_LARGE_STACK_SIZE; + } + else + { + /* Take the registry setting, and convert it into bytes */ + MmLargeStackSize *= 1024; + /* Now align it to a page boundary */ + MmLargeStackSize = PAGE_ROUND_UP(MmLargeStackSize); + + /* Sanity checks */ + ASSERT(MmLargeStackSize <= KERNEL_LARGE_STACK_SIZE); + ASSERT((MmLargeStackSize & (PAGE_SIZE - 1)) == 0); + + /* Make sure it's not too low */ + if (MmLargeStackSize < KERNEL_STACK_SIZE) MmLargeStackSize = KERNEL_STACK_SIZE; + } + // // The large kernel stack is cutomizable, but use default value for now // diff --git a/reactos/ntoskrnl/mm/ARM3/mminit.c b/reactos/ntoskrnl/mm/ARM3/mminit.c index 9829bb23218..21f666c81c3 100644 --- a/reactos/ntoskrnl/mm/ARM3/mminit.c +++ b/reactos/ntoskrnl/mm/ARM3/mminit.c @@ -232,7 +232,7 @@ ULONG MmSecondaryColorMask; // // Actual (registry-configurable) size of a GUI thread's stack // -ULONG MmLargeStackSize; +ULONG MmLargeStackSize = KERNEL_LARGE_STACK_SIZE; /* PRIVATE FUNCTIONS **********************************************************/