aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-06-24 15:24:59 +0000
committerJason A. Donenfeld <Jason@zx2c4.com>2019-07-03 08:50:30 +0000
commitd50cab57329de8314d3630fe48313ac1fa62c7a7 (patch)
tree1d6f122b71cf761a7e1b068c67b791265c9cf21c
parentAvoid allocating second MDL (diff)
downloadwintun-d50cab57329de8314d3630fe48313ac1fa62c7a7.tar.xz
wintun-d50cab57329de8314d3630fe48313ac1fa62c7a7.zip
Consider receive NBLs to be immutable
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--wintun.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/wintun.c b/wintun.c
index 074ca8d..f6c1a4f 100644
--- a/wintun.c
+++ b/wintun.c
@@ -246,11 +246,7 @@ static NTSTATUS TunGetIrpBuffer(_In_ IRP *Irp, _Out_ UCHAR **buffer, _Out_ ULONG
case IRP_MJ_WRITE:
*size = stack->Parameters.Write.Length;
-
- /* If we use MdlMappingNoWrite flag and call NdisMIndicateReceiveNetBufferLists without
- * NDIS_RECEIVE_FLAGS_RESOURCES flag we've got a ATTEMPTED_WRITE_TO_READONLY_MEMORY page
- * fault. */
- priority = NormalPagePriority /*| MdlMappingNoWrite*/;
+ priority = NormalPagePriority | MdlMappingNoWrite;
break;
default:
@@ -712,6 +708,7 @@ static NTSTATUS TunDispatchWrite(_Inout_ TUN_CTX *ctx, _Inout_ IRP *Irp)
nbl->SourceHandle = ctx->MiniportAdapterHandle;
NdisSetNblFlag(nbl, ether_const[idx].nbl_flags);
+ NdisSetNblFlag(nbl, NDIS_NBL_FLAGS_RECV_READ_ONLY);
NET_BUFFER_LIST_INFO(nbl, NetBufferListFrameType) = (PVOID)ether_const[idx].nbl_proto;
NET_BUFFER_LIST_STATUS(nbl) = NDIS_STATUS_SUCCESS;
NET_BUFFER_LIST_IRP(nbl) = Irp;