mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: util: safe MDL bug fix
This commit is contained in:
parent
fc77f4d9d3
commit
d0eee263c8
@ -738,24 +738,11 @@ static VOID FspQueueDelayedWorkItemDPC(PKDPC Dpc,
|
|||||||
ExQueueWorkItem(&DelayedWorkItem->WorkQueueItem, DelayedWorkQueue);
|
ExQueueWorkItem(&DelayedWorkItem->WorkQueueItem, DelayedWorkQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline PVOID FspGetMdlAddress(PMDL Mdl)
|
|
||||||
{
|
|
||||||
PVOID VirtualAddress = MmGetMdlVirtualAddress(Mdl);
|
|
||||||
|
|
||||||
if (0 == VirtualAddress)
|
|
||||||
VirtualAddress = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
|
|
||||||
|
|
||||||
return VirtualAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOLEAN FspSafeMdlCheck(PMDL Mdl)
|
BOOLEAN FspSafeMdlCheck(PMDL Mdl)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
PVOID VirtualAddress = FspGetMdlAddress(Mdl);
|
return 0 == MmGetMdlByteOffset(Mdl) && 0 == BYTE_OFFSET(MmGetMdlByteCount(Mdl));
|
||||||
ULONG ByteCount = MmGetMdlByteCount(Mdl);
|
|
||||||
|
|
||||||
return 0 == BYTE_OFFSET(VirtualAddress) && 0 == BYTE_OFFSET(ByteCount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspSafeMdlCreate(PMDL UserMdl, LOCK_OPERATION Operation, FSP_SAFE_MDL **PSafeMdl)
|
NTSTATUS FspSafeMdlCreate(PMDL UserMdl, LOCK_OPERATION Operation, FSP_SAFE_MDL **PSafeMdl)
|
||||||
@ -763,7 +750,7 @@ NTSTATUS FspSafeMdlCreate(PMDL UserMdl, LOCK_OPERATION Operation, FSP_SAFE_MDL *
|
|||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
PVOID VirtualAddress = FspGetMdlAddress(UserMdl);
|
PVOID VirtualAddress = MmGetSystemAddressForMdlSafe(UserMdl, NormalPagePriority);
|
||||||
ULONG ByteCount = MmGetMdlByteCount(UserMdl);
|
ULONG ByteCount = MmGetMdlByteCount(UserMdl);
|
||||||
ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddress, ByteCount);
|
ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddress, ByteCount);
|
||||||
FSP_SAFE_MDL *SafeMdl;
|
FSP_SAFE_MDL *SafeMdl;
|
||||||
@ -906,7 +893,7 @@ VOID FspSafeMdlCopyBack(FSP_SAFE_MDL *SafeMdl)
|
|||||||
if (IoReadAccess == SafeMdl->Operation)
|
if (IoReadAccess == SafeMdl->Operation)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PVOID VirtualAddress = FspGetMdlAddress(SafeMdl->UserMdl);
|
PVOID VirtualAddress = MmGetSystemAddressForMdlSafe(SafeMdl->UserMdl, NormalPagePriority);
|
||||||
ULONG ByteCount = MmGetMdlByteCount(SafeMdl->UserMdl);
|
ULONG ByteCount = MmGetMdlByteCount(SafeMdl->UserMdl);
|
||||||
ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddress, ByteCount);
|
ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddress, ByteCount);
|
||||||
ULONG ByteOffsetBgn0, ByteOffsetEnd0, ByteOffsetEnd1;
|
ULONG ByteOffsetBgn0, ByteOffsetEnd0, ByteOffsetEnd1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user