From 8f5e892fbfa324a2b71ff2e8d0a9edd5e84b08a4 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 12 Aug 2008 18:34:07 +0000 Subject: [PATCH] - Free the MDL on failure - Use _SEH_YIELD svn path=/branches/aicom-network-fixes/; revision=35291 --- drivers/network/afd/afd/tdi.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/drivers/network/afd/afd/tdi.c b/drivers/network/afd/afd/tdi.c index 925a07277fe..a80452d2284 100644 --- a/drivers/network/afd/afd/tdi.c +++ b/drivers/network/afd/afd/tdi.c @@ -864,17 +864,12 @@ NTSTATUS TdiSend MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; - Status = STATUS_INSUFFICIENT_RESOURCES; + _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; - if( !NT_SUCCESS(Status) ) { - IoFreeIrp(*Irp); - *Irp = NULL; - return Status; - } - AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl)); TdiBuildSend(*Irp, /* I/O Request Packet */ @@ -952,17 +947,12 @@ NTSTATUS TdiReceive( AFD_DbgPrint(MIN_TRACE, ("probe and lock done\n")); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; - Status = STATUS_INSUFFICIENT_RESOURCES; + _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; - if( !NT_SUCCESS(Status) ) { - IoFreeIrp(*Irp); - *Irp = NULL; - return Status; - } - AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl)); TdiBuildReceive(*Irp, /* I/O Request Packet */ @@ -1055,6 +1045,7 @@ NTSTATUS TdiReceiveDatagram( MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); @@ -1153,6 +1144,7 @@ NTSTATUS TdiSendDatagram( MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES);