mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:45:41 +00:00
[NTOSKRNL] Add a few asserts when mapping a VACB in kernel space
Also, reset VACB content when returning it to the lookaside list CORE-14478
This commit is contained in:
parent
8aff426af0
commit
dea9c291ab
1 changed files with 11 additions and 1 deletions
|
@ -624,17 +624,20 @@ CcRosMapVacbInKernelSpace(
|
||||||
ULONG i;
|
ULONG i;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ULONG_PTR NumberOfPages;
|
ULONG_PTR NumberOfPages;
|
||||||
|
PVOID BaseAddress = NULL;
|
||||||
|
|
||||||
/* Create a memory area. */
|
/* Create a memory area. */
|
||||||
MmLockAddressSpace(MmGetKernelAddressSpace());
|
MmLockAddressSpace(MmGetKernelAddressSpace());
|
||||||
Status = MmCreateMemoryArea(MmGetKernelAddressSpace(),
|
Status = MmCreateMemoryArea(MmGetKernelAddressSpace(),
|
||||||
0, // nothing checks for VACB mareas, so set to 0
|
0, // nothing checks for VACB mareas, so set to 0
|
||||||
&Vacb->BaseAddress,
|
&BaseAddress,
|
||||||
VACB_MAPPING_GRANULARITY,
|
VACB_MAPPING_GRANULARITY,
|
||||||
PAGE_READWRITE,
|
PAGE_READWRITE,
|
||||||
(PMEMORY_AREA*)&Vacb->MemoryArea,
|
(PMEMORY_AREA*)&Vacb->MemoryArea,
|
||||||
0,
|
0,
|
||||||
PAGE_SIZE);
|
PAGE_SIZE);
|
||||||
|
ASSERT(Vacb->BaseAddress == NULL);
|
||||||
|
Vacb->BaseAddress = BaseAddress;
|
||||||
MmUnlockAddressSpace(MmGetKernelAddressSpace());
|
MmUnlockAddressSpace(MmGetKernelAddressSpace());
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -644,6 +647,7 @@ CcRosMapVacbInKernelSpace(
|
||||||
|
|
||||||
ASSERT(((ULONG_PTR)Vacb->BaseAddress % PAGE_SIZE) == 0);
|
ASSERT(((ULONG_PTR)Vacb->BaseAddress % PAGE_SIZE) == 0);
|
||||||
ASSERT((ULONG_PTR)Vacb->BaseAddress > (ULONG_PTR)MmSystemRangeStart);
|
ASSERT((ULONG_PTR)Vacb->BaseAddress > (ULONG_PTR)MmSystemRangeStart);
|
||||||
|
ASSERT((ULONG_PTR)Vacb->BaseAddress + VACB_MAPPING_GRANULARITY - 1 > (ULONG_PTR)MmSystemRangeStart);
|
||||||
|
|
||||||
/* Create a virtual mapping for this memory area */
|
/* Create a virtual mapping for this memory area */
|
||||||
NumberOfPages = BYTES_TO_PAGES(VACB_MAPPING_GRANULARITY);
|
NumberOfPages = BYTES_TO_PAGES(VACB_MAPPING_GRANULARITY);
|
||||||
|
@ -659,6 +663,11 @@ CcRosMapVacbInKernelSpace(
|
||||||
KeBugCheck(MEMORY_MANAGEMENT);
|
KeBugCheck(MEMORY_MANAGEMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSERT(BaseAddress == Vacb->BaseAddress);
|
||||||
|
ASSERT(i * PAGE_SIZE < VACB_MAPPING_GRANULARITY);
|
||||||
|
ASSERT((ULONG_PTR)Vacb->BaseAddress + (i * PAGE_SIZE) >= (ULONG_PTR)BaseAddress);
|
||||||
|
ASSERT((ULONG_PTR)Vacb->BaseAddress + (i * PAGE_SIZE) > (ULONG_PTR)MmSystemRangeStart);
|
||||||
|
|
||||||
Status = MmCreateVirtualMapping(NULL,
|
Status = MmCreateVirtualMapping(NULL,
|
||||||
(PVOID)((ULONG_PTR)Vacb->BaseAddress + (i * PAGE_SIZE)),
|
(PVOID)((ULONG_PTR)Vacb->BaseAddress + (i * PAGE_SIZE)),
|
||||||
PAGE_READWRITE,
|
PAGE_READWRITE,
|
||||||
|
@ -951,6 +960,7 @@ CcRosInternalFreeVacb (
|
||||||
|
|
||||||
ASSERT(Vacb->PinCount == 0);
|
ASSERT(Vacb->PinCount == 0);
|
||||||
ASSERT(Vacb->ReferenceCount == 0);
|
ASSERT(Vacb->ReferenceCount == 0);
|
||||||
|
RtlFillMemory(Vacb, sizeof(Vacb), 0xfd);
|
||||||
ExFreeToNPagedLookasideList(&VacbLookasideList, Vacb);
|
ExFreeToNPagedLookasideList(&VacbLookasideList, Vacb);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue