Switch to paged dispatch handlers

We're not totally sure this is kosher, unfortunately.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2019-07-18 11:28:25 +00:00
parent 043abc0a8e
commit aac642e3dc

View File

@ -680,7 +680,7 @@ TunUnregisterBuffers(_Inout_ TUN_CTX *Ctx, _In_ FILE_OBJECT *Owner)
} }
_Dispatch_type_(IRP_MJ_DEVICE_CONTROL) _Dispatch_type_(IRP_MJ_DEVICE_CONTROL)
static DRIVER_DISPATCH TunDispatchDeviceControl; static DRIVER_DISPATCH_PAGED TunDispatchDeviceControl;
_Use_decl_annotations_ _Use_decl_annotations_
static NTSTATUS static NTSTATUS
TunDispatchDeviceControl(DEVICE_OBJECT *DeviceObject, IRP *Irp) TunDispatchDeviceControl(DEVICE_OBJECT *DeviceObject, IRP *Irp)
@ -702,7 +702,7 @@ TunDispatchDeviceControl(DEVICE_OBJECT *DeviceObject, IRP *Irp)
} }
_Dispatch_type_(IRP_MJ_CLOSE) _Dispatch_type_(IRP_MJ_CLOSE)
static DRIVER_DISPATCH TunDispatchClose; static DRIVER_DISPATCH_PAGED TunDispatchClose;
_Use_decl_annotations_ _Use_decl_annotations_
static NTSTATUS static NTSTATUS
TunDispatchClose(DEVICE_OBJECT *DeviceObject, IRP *Irp) TunDispatchClose(DEVICE_OBJECT *DeviceObject, IRP *Irp)
@ -717,7 +717,7 @@ TunDispatchClose(DEVICE_OBJECT *DeviceObject, IRP *Irp)
} }
_Dispatch_type_(IRP_MJ_PNP) _Dispatch_type_(IRP_MJ_PNP)
static DRIVER_DISPATCH TunDispatchPnP; static DRIVER_DISPATCH_PAGED TunDispatchPnP;
_Use_decl_annotations_ _Use_decl_annotations_
static NTSTATUS static NTSTATUS
TunDispatchPnP(DEVICE_OBJECT *DeviceObject, IRP *Irp) TunDispatchPnP(DEVICE_OBJECT *DeviceObject, IRP *Irp)
@ -794,6 +794,9 @@ TunInitializeEx(
if (!MiniportAdapterHandle) if (!MiniportAdapterHandle)
return NDIS_STATUS_FAILURE; return NDIS_STATUS_FAILURE;
/* Leaking memory 'Ctx'. Note: 'Ctx' is freed in TunHaltEx or on failure. */
#pragma warning(suppress : 6014)
TUN_CTX *Ctx = ExAllocatePoolWithTag(NonPagedPoolNx, sizeof(*Ctx), TUN_MEMORY_TAG); TUN_CTX *Ctx = ExAllocatePoolWithTag(NonPagedPoolNx, sizeof(*Ctx), TUN_MEMORY_TAG);
if (!Ctx) if (!Ctx)
return NDIS_STATUS_FAILURE; return NDIS_STATUS_FAILURE;
@ -837,7 +840,7 @@ TunInitializeEx(
.fAllocateNetBuffer = TRUE, .fAllocateNetBuffer = TRUE,
.PoolTag = TUN_MEMORY_TAG .PoolTag = TUN_MEMORY_TAG
}; };
/* Leaking memory 'Ctx->NblPool'. Note: 'Ctx->NblPool' is freed in TunHaltEx; or on failure. */ /* Leaking memory 'Ctx->NblPool'. Note: 'Ctx->NblPool' is freed in TunHaltEx or on failure. */
#pragma warning(suppress : 6014) #pragma warning(suppress : 6014)
Ctx->NblPool = NdisAllocateNetBufferListPool(MiniportAdapterHandle, &NblPoolParameters); Ctx->NblPool = NdisAllocateNetBufferListPool(MiniportAdapterHandle, &NblPoolParameters);
if (Status = NDIS_STATUS_FAILURE, !Ctx->NblPool) if (Status = NDIS_STATUS_FAILURE, !Ctx->NblPool)