[NTOSKRNL] Properly align VACB writes
authorPierre Schweitzer <pierre@reactos.org>
Sun, 23 Sep 2018 08:31:01 +0000 (10:31 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 23 Sep 2018 08:32:14 +0000 (10:32 +0200)
Also simplify VACB reads alignment code.
Also add some sanity ASSERTs.

ntoskrnl/cc/copy.c

index 78c6553..4509e2e 100644 (file)
@@ -81,7 +81,7 @@ NTAPI
 CcReadVirtualAddress (
     PROS_VACB Vacb)
 {
-    ULONG Size, Pages;
+    ULONG Size;
     PMDL Mdl;
     NTSTATUS Status;
     IO_STATUS_BLOCK IoStatus;
@@ -95,10 +95,11 @@ CcReadVirtualAddress (
     }
     Size = LargeSize.LowPart;
 
-    Pages = BYTES_TO_PAGES(Size);
-    ASSERT(Pages * PAGE_SIZE <= VACB_MAPPING_GRANULARITY);
+    Size = ROUND_TO_PAGES(Size);
+    ASSERT(Size <= VACB_MAPPING_GRANULARITY);
+    ASSERT(Size > 0);
 
-    Mdl = IoAllocateMdl(Vacb->BaseAddress, Pages * PAGE_SIZE, FALSE, FALSE, NULL);
+    Mdl = IoAllocateMdl(Vacb->BaseAddress, Size, FALSE, FALSE, NULL);
     if (!Mdl)
     {
         return STATUS_INSUFFICIENT_RESOURCES;
@@ -177,6 +178,10 @@ CcWriteVirtualAddress (
         } while (++i < (Size >> PAGE_SHIFT));
     }
 
+    Size = ROUND_TO_PAGES(Size);
+    ASSERT(Size <= VACB_MAPPING_GRANULARITY);
+    ASSERT(Size > 0);
+
     Mdl = IoAllocateMdl(Vacb->BaseAddress, Size, FALSE, FALSE, NULL);
     if (!Mdl)
     {