[ros-diffs] [arty] 35317: Merge aicom-network-fixes up to 35306.

arty at svn.reactos.org arty at svn.reactos.org
Wed Aug 13 22:44:21 CEST 2008


Author: arty
Date: Wed Aug 13 15:44:20 2008
New Revision: 35317

URL: http://svn.reactos.org/svn/reactos?rev=35317&view=rev
Log:
Merge aicom-network-fixes up to 35306.

Modified:
    trunk/reactos/boot/bootdata/txtsetup.sif
    trunk/reactos/drivers/network/afd/afd/connect.c
    trunk/reactos/drivers/network/afd/afd/listen.c
    trunk/reactos/drivers/network/afd/afd/lock.c
    trunk/reactos/drivers/network/afd/afd/main.c
    trunk/reactos/drivers/network/afd/afd/read.c
    trunk/reactos/drivers/network/afd/afd/tdi.c
    trunk/reactos/drivers/network/afd/afd/tdiconn.c
    trunk/reactos/drivers/network/afd/afd/write.c

Modified: trunk/reactos/boot/bootdata/txtsetup.sif
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/txtsetup.sif?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/boot/bootdata/txtsetup.sif [iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/txtsetup.sif [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -49,8 +49,8 @@
 
 [SetupData]
 DefaultPath = \ReactOS
-OsLoadOptions = "/NOGUIBOOT /NODEBUG"
-DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1"
+OsLoadOptions = "/NOGUIBOOT /NODEBUG /DEBUGPORT=COM1 /KDSERIAL"
+DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1 /KDSERIAL"
 ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN"
 ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS"
 

Modified: trunk/reactos/drivers/network/afd/afd/connect.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/connect.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/connect.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/connect.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -33,26 +33,32 @@
 }
 
 NTSTATUS MakeSocketIntoConnection( PAFD_FCB FCB ) {
-    NTSTATUS Status = STATUS_NO_MEMORY;
+    NTSTATUS Status;
 
     /* Allocate the receive area and start receiving */
     FCB->Recv.Window =
 	ExAllocatePool( NonPagedPool, FCB->Recv.Size );
+
+    if( !FCB->Recv.Window ) return STATUS_NO_MEMORY;
+
     FCB->Send.Window =
 	ExAllocatePool( NonPagedPool, FCB->Send.Size );
 
+    if( !FCB->Send.Window ) {
+	ExFreePool( FCB->Recv.Window );	
+	return STATUS_NO_MEMORY;
+    }
+
     FCB->State = SOCKET_STATE_CONNECTED;
 
-    if( FCB->Recv.Window ) {
-	Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest,
-			     FCB->Connection.Object,
-			     TDI_RECEIVE_NORMAL,
-			     FCB->Recv.Window,
-			     FCB->Recv.Size,
-			     &FCB->ReceiveIrp.Iosb,
-			     ReceiveComplete,
-			     FCB );
-    }
+    Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest,
+			 FCB->Connection.Object,
+			 TDI_RECEIVE_NORMAL,
+			 FCB->Recv.Window,
+			 FCB->Recv.Size,
+			 &FCB->ReceiveIrp.Iosb,
+			 ReceiveComplete,
+			 FCB );
 
     return Status;
 }
@@ -102,8 +108,9 @@
     if( NT_SUCCESS(Status) ) {
 	Status = MakeSocketIntoConnection( FCB );
 
-	if( FCB->Send.Window &&
-	    !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) {
+	if( !NT_SUCCESS(Status) ) return Status;
+
+	if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) {
 	    NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
 	    NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP,
 					Tail.Overlay.ListEntry);
@@ -158,7 +165,7 @@
     case SOCKET_STATE_CONNECTING:
 	return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT );
 
-    case SOCKET_STATE_CREATED: {
+    case SOCKET_STATE_CREATED:
 	FCB->LocalAddress =
 	    TaCopyTransportAddress( &ConnectReq->RemoteAddress );
 
@@ -182,7 +189,8 @@
 	} else
 	    return UnlockAndMaybeComplete
 		( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
-    } /* Drop through to SOCKET_STATE_BOUND */
+    
+    /* Drop through to SOCKET_STATE_BOUND */
 
     case SOCKET_STATE_BOUND:
 	FCB->RemoteAddress =

Modified: trunk/reactos/drivers/network/afd/afd/listen.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/listen.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -142,6 +142,8 @@
 				 ListEntry ) );
     }
 
+    if( FCB->ListenIrp.ConnectionCallInfo ) ExFreePool( FCB->ListenIrp.ConnectionCallInfo );
+    if( FCB->ListenIrp.ConnectionReturnInfo ) ExFreePool( FCB->ListenIrp.ConnectionReturnInfo );
     FCB->NeedsNewListen = TRUE;
 
     /* Trigger a select return if appropriate */
@@ -182,9 +184,11 @@
 
     Status = WarmSocketForConnection( FCB );
 
+    AFD_DbgPrint(MID_TRACE,("Status from warmsocket %x\n", Status));
+
+    if( !NT_SUCCESS(Status) ) return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
+
     FCB->State = SOCKET_STATE_LISTENING;
-
-    AFD_DbgPrint(MID_TRACE,("Status from warmsocket %x\n", Status));
 
     TdiBuildNullConnectionInfo
 	( &FCB->ListenIrp.ConnectionCallInfo,
@@ -275,7 +279,7 @@
 				&FCB->ListenIrp.Iosb,
 				ListenComplete,
 				FCB );
-	}
+	} else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
 	FCB->NeedsNewListen = FALSE;
     }
 

Modified: trunk/reactos/drivers/network/afd/afd/lock.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/lock.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/lock.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/lock.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -112,14 +112,18 @@
     PAFD_MAPBUF Map = (PAFD_MAPBUF)(Buf + Count + Lock);
     UINT i;
 
+    if( !Buf ) return;
+
     for( i = 0; i < Count + Lock; i++ ) {
 	if( Map[i].Mdl ) {
 	    MmUnlockPages( Map[i].Mdl );
 	    IoFreeMdl( Map[i].Mdl );
+	    Map[i].Mdl = NULL;
 	}
     }
 
     ExFreePool( Buf );
+    Buf = NULL;
 }
 
 /* Produce a kernel-land handle array with handles replaced by object

Modified: trunk/reactos/drivers/network/afd/afd/main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/main.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/main.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/main.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -114,9 +114,6 @@
 	FCB->TdiDeviceName.MaximumLength = FCB->TdiDeviceName.Length;
 	FCB->TdiDeviceName.Buffer =
 	    ExAllocatePool( NonPagedPool, FCB->TdiDeviceName.Length );
-	RtlCopyMemory( FCB->TdiDeviceName.Buffer,
-		       ConnectInfo->TransportName,
-		       FCB->TdiDeviceName.Length );
 
 	if( !FCB->TdiDeviceName.Buffer ) {
 	    ExFreePool(FCB);
@@ -125,6 +122,10 @@
 	    IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
 	    return STATUS_NO_MEMORY;
 	}
+
+	RtlCopyMemory( FCB->TdiDeviceName.Buffer,
+		       ConnectInfo->TransportName,
+		       FCB->TdiDeviceName.Length );
 
 	AFD_DbgPrint(MID_TRACE,("Success: %s %wZ\n",
 				EaInfo->EaName, &FCB->TdiDeviceName));
@@ -207,6 +208,8 @@
 	ExFreePool( FCB->AddressFrom );
     if( FCB->LocalAddress )
 	ExFreePool( FCB->LocalAddress );
+    if( FCB->RemoteAddress )
+	ExFreePool( FCB->RemoteAddress );
 
     ExFreePool(FCB->TdiDeviceName.Buffer);
 

Modified: trunk/reactos/drivers/network/afd/afd/read.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/read.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/read.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/read.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -574,14 +574,14 @@
     AFD_DbgPrint(MID_TRACE,("Recv flags %x\n", RecvReq->AfdFlags));
 
     RecvReq->BufferArray = LockBuffers( RecvReq->BufferArray,
-					RecvReq->BufferCount,
+	       				RecvReq->BufferCount,
 					RecvReq->Address,
 					RecvReq->AddressLength,
 					TRUE, TRUE );
 
     if( !RecvReq->BufferArray ) { /* access violation in userspace */
-	return UnlockAndMaybeComplete
-	    ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL );
+	    return UnlockAndMaybeComplete
+	           ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL );
     }
 
     if( !IsListEmpty( &FCB->DatagramList ) ) {
@@ -602,8 +602,10 @@
 
 	    PollReeval( FCB->DeviceExt, FCB->FileObject );
 
+	    UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE );
+
 	    return UnlockAndMaybeComplete
-		( FCB, Status, Irp, RecvReq->BufferArray[0].len, NULL );
+		( FCB, Status, Irp, Irp->IoStatus.Information, NULL );
 	} else {
 	    Status = SatisfyPacketRecvRequest
 		( FCB, Irp, DatagramRecv,
@@ -615,6 +617,8 @@
 		FCB->PollState |= AFD_EVENT_RECEIVE;
 
 	    PollReeval( FCB->DeviceExt, FCB->FileObject );
+
+	    UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE );
 
 	    return UnlockAndMaybeComplete
 		( FCB, Status, Irp, Irp->IoStatus.Information, NULL );

Modified: trunk/reactos/drivers/network/afd/afd/tdi.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/tdi.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/tdi.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/tdi.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -864,16 +864,11 @@
         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));
 
@@ -952,16 +947,11 @@
         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));
 
@@ -1055,6 +1045,7 @@
         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 @@
         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);

Modified: trunk/reactos/drivers/network/afd/afd/tdiconn.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/tdiconn.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/tdiconn.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/tdiconn.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -8,6 +8,7 @@
  * 20040708 Created
  */
 #include <afd.h>
+#include <pseh/pseh.h>
 #include "debug.h"
 #include "tdiconn.h"
 
@@ -126,9 +127,11 @@
 
   Status = TdiBuildNullConnectionInfoInPlace( ConnInfo, Type );
 
-  if (!NT_SUCCESS(Status))
+  if (!NT_SUCCESS(Status)) {
       ExFreePool( ConnInfo );
-  else
+      *ConnectionInfo = NULL;
+      return Status;
+  } else
       *ConnectionInfo = ConnInfo;
 
   ConnInfo->RemoteAddress = (PTA_ADDRESS)&ConnInfo[1];
@@ -144,9 +147,13 @@
   PTRANSPORT_ADDRESS Address ) {
     NTSTATUS Status = STATUS_SUCCESS;
 
-    RtlCopyMemory( ConnectionInfo->RemoteAddress,
-		   Address,
-		   ConnectionInfo->RemoteAddressLength );
+    _SEH_TRY {
+    	RtlCopyMemory( ConnectionInfo->RemoteAddress,
+		       Address,
+		       ConnectionInfo->RemoteAddressLength );
+    } _SEH_HANDLE {
+	Status = _SEH_GetExceptionCode();
+    } _SEH_END;
 
     return Status;
 }

Modified: trunk/reactos/drivers/network/afd/afd/write.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/write.c?rev=35317&r1=35316&r2=35317&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/write.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/write.c [iso-8859-1] Wed Aug 13 15:44:20 2008
@@ -226,23 +226,30 @@
                                             NULL, NULL,
                                             FALSE, FALSE );
 
+	if( !SendReq->BufferArray ) {
+	    return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION,
+                                           Irp, 0, NULL );
+	}
+
         TdiBuildConnectionInfo( &TargetAddress, FCB->RemoteAddress );
 
-        SocketCalloutEnter( FCB );
-
-        Status = TdiSendDatagram
-            ( &FCB->SendIrp.InFlightRequest,
-              FCB->AddressFile.Object,
-              SendReq->BufferArray[0].buf,
-              SendReq->BufferArray[0].len,
-              TargetAddress,
-              &FCB->SendIrp.Iosb,
-              PacketSocketSendComplete,
-              FCB );
-
-        SocketCalloutLeave( FCB );
-
-        ExFreePool( TargetAddress );
+	if( TargetAddress ) {
+            SocketCalloutEnter( FCB );
+
+            Status = TdiSendDatagram
+                ( &FCB->SendIrp.InFlightRequest,
+                  FCB->AddressFile.Object,
+                  SendReq->BufferArray[0].buf,
+                  SendReq->BufferArray[0].len,
+                  TargetAddress,
+                  &FCB->SendIrp.Iosb,
+                  PacketSocketSendComplete,
+                  FCB );
+
+           SocketCalloutLeave( FCB );
+
+           ExFreePool( TargetAddress );
+	} else Status = STATUS_NO_MEMORY;
 
         if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS;
 
@@ -277,6 +284,11 @@
 					SendReq->BufferCount,
 					NULL, NULL,
 					FALSE, FALSE );
+
+    if( !SendReq->BufferArray ) {
+        return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION,
+                                       Irp, 0, NULL );
+    }
 
     AFD_DbgPrint(MID_TRACE,("FCB->Send.BytesUsed = %d\n",
 			    FCB->Send.BytesUsed));



More information about the Ros-diffs mailing list