diff --git a/src/sys/read.c b/src/sys/read.c index 863ed53d..7285167b 100644 --- a/src/sys/read.c +++ b/src/sys/read.c @@ -297,7 +297,8 @@ NTSTATUS FspFsvolReadComplete( ULONG InfoChangeNumber; BOOLEAN Success; - FspSafeMdlCopyBack(SafeMdl); + if (0 != SafeMdl) + FspSafeMdlCopyBack(SafeMdl); if (!PagingIo) { diff --git a/src/sys/util.c b/src/sys/util.c index 335aca51..34e0ab94 100644 --- a/src/sys/util.c +++ b/src/sys/util.c @@ -592,7 +592,7 @@ NTSTATUS FspSafeMdlCreate(PMDL UserMdl, LOCK_OPERATION Operation, FSP_SAFE_MDL * if (Buffer1) { RtlCopyMemory((PUINT8)SafeMdl->Buffer + (BufferPageCount - 1) * PAGE_SIZE, - (PUINT8)VirtualAddress + (PageCount - 1) * PAGE_SIZE, ByteOffsetEnd1); + PAGE_ALIGN((PUINT8)VirtualAddress + (PageCount - 1) * PAGE_SIZE), ByteOffsetEnd1); RtlZeroMemory((PUINT8)SafeMdl->Buffer + (BufferPageCount - 1) * PAGE_SIZE + ByteOffsetEnd1, PAGE_SIZE - ByteOffsetEnd1); SafePfnArray[PageCount - 1] = TempPfnArray[BufferPageCount - 1]; @@ -680,7 +680,7 @@ VOID FspSafeMdlCopyBack(FSP_SAFE_MDL *SafeMdl) RtlCopyMemory((PUINT8)VirtualAddress, (PUINT8)SafeMdl->Buffer + ByteOffsetBgn0, ByteOffsetEnd0 - ByteOffsetBgn0); if (Buffer1) - RtlCopyMemory((PUINT8)VirtualAddress + (PageCount - 1) * PAGE_SIZE, + RtlCopyMemory(PAGE_ALIGN((PUINT8)VirtualAddress + (PageCount - 1) * PAGE_SIZE), (PUINT8)SafeMdl->Buffer + (BufferPageCount - 1) * PAGE_SIZE, ByteOffsetEnd1); } }