https://git.reactos.org/?p=reactos.git;a=commitdiff;h=91edefa11e4d7230155dcaafe052a6fd10d7dd57

commit 91edefa11e4d7230155dcaafe052a6fd10d7dd57
Author:     Jérôme Gardou <[email protected]>
AuthorDate: Wed Dec 2 11:40:25 2020 +0100
Commit:     Jérôme Gardou <[email protected]>
CommitDate: Wed Feb 3 09:41:22 2021 +0100

    [NTOS:MM] Do not limit ourselves in reading or writing the file
---
 ntoskrnl/mm/section.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c
index 8df9b99cfb8..f3b30dedaed 100644
--- a/ntoskrnl/mm/section.c
+++ b/ntoskrnl/mm/section.c
@@ -214,16 +214,9 @@ MiWritePage(PMM_SECTION_SEGMENT Segment,
     PMDL Mdl = (PMDL)MdlBase;
     PFILE_OBJECT FileObject = Segment->FileObject;
     LARGE_INTEGER FileOffset;
-    PFSRTL_COMMON_FCB_HEADER Fcb = FileObject->FsContext;
 
     FileOffset.QuadPart = Segment->Image.FileOffset + SegOffset;
 
-    /* Check if we are not writing off-limit */
-    if (FileOffset.QuadPart >= Fcb->AllocationSize.QuadPart)
-    {
-        return STATUS_SUCCESS;
-    }
-
     RtlZeroMemory(MdlBase, sizeof(MdlBase));
     MmInitializeMdl(Mdl, NULL, PAGE_SIZE);
     MmBuildMdlFromPages(Mdl, &Page);
@@ -1179,18 +1172,15 @@ MiReadPage(PMEMORY_AREA MemoryArea,
     PMDL Mdl = (PMDL)MdlBase;
     PFILE_OBJECT FileObject = MemoryArea->SectionData.Segment->FileObject;
     LARGE_INTEGER FileOffset;
-    PFSRTL_COMMON_FCB_HEADER Fcb = FileObject->FsContext;
 
     FileOffset.QuadPart = MemoryArea->SectionData.Segment->Image.FileOffset + 
SegOffset;
 
+    DPRINT("Reading file at offset %08x:%08x\n", FileOffset.HighPart, 
FileOffset.LowPart);
+
     Status = MmRequestPageMemoryConsumer(MC_USER, FALSE, Page);
     if (!NT_SUCCESS(Status))
         return Status;
 
-    /* Check if we are beyond the file */
-    if (FileOffset.QuadPart > Fcb->FileSize.QuadPart)
-        return STATUS_SUCCESS;
-
     RtlZeroMemory(MdlBase, sizeof(MdlBase));
     MmInitializeMdl(Mdl, NULL, PAGE_SIZE);
     MmBuildMdlFromPages(Mdl, Page);
@@ -1204,6 +1194,7 @@ MiReadPage(PMEMORY_AREA MemoryArea,
         KeWaitForSingleObject(&Event, WrPageIn, KernelMode, FALSE, NULL);
         Status = IoStatus.Status;
     }
+
     if (Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA)
     {
         MmUnmapLockedPages (Mdl->MappedSystemVa, Mdl);
@@ -4539,6 +4530,7 @@ MmMakePagesResident(
             MmUnlockAddressSpace(AddressSpace);
 
             /* FIXME: Read the whole range at once instead of one page at a 
time */
+            /* Ignore file size, as Cc already checked on its side. */
             Status = MiReadPage(MemoryArea, SegmentOffset.QuadPart, &Page);
             if (!NT_SUCCESS(Status))
             {

Reply via email to