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…
==============================================================================
--- 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/co…
==============================================================================
--- 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/li…
==============================================================================
--- 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/lo…
==============================================================================
--- 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/ma…
==============================================================================
--- 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/re…
==============================================================================
--- 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/td…
==============================================================================
--- 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/td…
==============================================================================
--- 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/wr…
==============================================================================
--- 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));