Author: arty
Date: Sat Aug 16 17:39:01 2008
New Revision: 35399
URL:
http://svn.reactos.org/svn/reactos?rev=35399&view=rev
Log:
Merge aicom-network-fixes up to 35398
Modified:
trunk/reactos/drivers/network/afd/afd/context.c
trunk/reactos/drivers/network/afd/afd/info.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/tcpip/tcpip/irp.c
Modified: trunk/reactos/drivers/network/afd/afd/context.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/co…
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/context.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/context.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -39,27 +39,30 @@
NTSTATUS STDCALL
AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp ) {
- NTSTATUS Status = STATUS_NO_MEMORY;
+ NTSTATUS Status = STATUS_BUFFER_TOO_SMALL;
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
+ if( FCB->Context ) {
+ ExFreePool( FCB->Context );
+ FCB->Context = NULL;
+ }
+
if( FCB->ContextSize <
IrpSp->Parameters.DeviceIoControl.InputBufferLength ) {
- if( FCB->Context )
- ExFreePool( FCB->Context );
FCB->Context =
ExAllocatePool
( PagedPool,
IrpSp->Parameters.DeviceIoControl.InputBufferLength );
- }
- if( FCB->Context ) {
- Status = STATUS_SUCCESS;
+ if( !FCB->Context ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0,
NULL );
+
RtlCopyMemory( FCB->Context,
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer,
IrpSp->Parameters.DeviceIoControl.InputBufferLength );
+ Status = STATUS_SUCCESS;
}
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
Modified: trunk/reactos/drivers/network/afd/afd/info.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/in…
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/info.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/info.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -24,12 +24,9 @@
AFD_DbgPrint(MID_TRACE,("Called %x %x\n", InfoReq,
InfoReq ? InfoReq->InformationClass : 0));
+ if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
+
_SEH_TRY {
- if( !SocketAcquireStateLock( FCB ) ) {
- Status = LostSocket( Irp );
- _SEH_YIELD(return Status);
- }
-
switch( InfoReq->InformationClass ) {
case AFD_INFO_RECEIVE_WINDOW_SIZE:
InfoReq->Information.Ulong = FCB->Recv.Size;
@@ -113,7 +110,7 @@
TDI_QUERY_ADDRESS_INFO,
Mdl );
} else {
- if( !NT_SUCCESS
+ if( NT_SUCCESS
( Status = TdiBuildNullConnectionInfo
( &ConnInfo,
FCB->LocalAddress->Address[0].AddressType ) ) ) {
@@ -148,11 +145,11 @@
if( ConnInfo ) ExFreePool( ConnInfo );
if( SysMdl ) IoFreeMdl( SysMdl );
+ if( TransAddr ) MmUnmapLockedPages( TransAddr, Mdl );
}
+ /* MmUnlockPages( Mdl ); */
}
-
- /* MmUnlockPages( Mdl ); */
- /* IoFreeMdl( Mdl ); */
+ /* IoFreeMdl( Mdl ); */
} else {
Status = STATUS_INSUFFICIENT_RESOURCES;
}
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] Sat Aug 16 17:39:01 2008
@@ -188,14 +188,17 @@
if( !NT_SUCCESS(Status) ) return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL
);
- FCB->State = SOCKET_STATE_LISTENING;
-
TdiBuildNullConnectionInfo
( &FCB->ListenIrp.ConnectionCallInfo,
FCB->LocalAddress->Address[0].AddressType );
TdiBuildNullConnectionInfo
( &FCB->ListenIrp.ConnectionReturnInfo,
FCB->LocalAddress->Address[0].AddressType );
+
+ if( !FCB->ListenIrp.ConnectionReturnInfo || !FCB->ListenIrp.ConnectionCallInfo
)
+ return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
+
+ FCB->State = SOCKET_STATE_LISTENING;
Status = TdiListen( &FCB->ListenIrp.InFlightRequest,
FCB->Connection.Object,
@@ -272,6 +275,8 @@
( &FCB->ListenIrp.ConnectionReturnInfo,
FCB->LocalAddress->Address[0].AddressType );
+ if( !FCB->ListenIrp.ConnectionReturnInfo ) return UnlockAndMaybeComplete( FCB,
STATUS_NO_MEMORY, Irp, 0, NULL );
+
Status = TdiListen( &FCB->ListenIrp.InFlightRequest,
FCB->Connection.Object,
&FCB->ListenIrp.ConnectionCallInfo,
@@ -306,6 +311,8 @@
(PVOID *)&NewFileObject,
NULL );
+ if( !NT_SUCCESS(Status) ) UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL
);
+
ASSERT(NewFileObject != FileObject);
ASSERT(NewFileObject->FsContext != FCB);
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] Sat Aug 16 17:39:01 2008
@@ -167,7 +167,7 @@
NTSTATUS Status = STATUS_SUCCESS;
PVOID CurrentThread = KeGetCurrentThread();
- ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
+ ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
AFD_DbgPrint(MAX_TRACE,("Called on %x, attempting to lock\n", FCB));
@@ -218,7 +218,7 @@
PVOID CurrentThread = KeGetCurrentThread();
#endif
ASSERT(FCB->LockCount > 0);
- ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
+ ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
ExAcquireFastMutex( &FCB->Mutex );
FCB->LockCount--;
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] Sat Aug 16 17:39:01 2008
@@ -210,8 +210,12 @@
ExFreePool( FCB->LocalAddress );
if( FCB->RemoteAddress )
ExFreePool( FCB->RemoteAddress );
-
- ExFreePool(FCB->TdiDeviceName.Buffer);
+ if( FCB->ListenIrp.ConnectionReturnInfo )
+ ExFreePool( FCB->ListenIrp.ConnectionReturnInfo );
+ if( FCB->ListenIrp.ConnectionCallInfo )
+ ExFreePool( FCB->ListenIrp.ConnectionCallInfo );
+ if( FCB->TdiDeviceName.Buffer )
+ ExFreePool(FCB->TdiDeviceName.Buffer);
ExFreePool(FCB);
AFD_DbgPrint(MIN_TRACE,("Deleted (%x)\n", FCB));
Modified: trunk/reactos/drivers/network/tcpip/tcpip/irp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/tcpip/tcpi…
==============================================================================
--- trunk/reactos/drivers/network/tcpip/tcpip/irp.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/tcpip/tcpip/irp.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -27,14 +27,14 @@
UntrackFL( __FILE__, __LINE__, Irp );
#endif
- (void)IoSetCancelRoutine( Irp, NULL );
+ Irp->IoStatus.Status = Status;
if( Status == STATUS_PENDING )
IoMarkIrpPending( Irp );
else {
- Irp->IoStatus.Status = Status;
Irql = KeGetCurrentIrql();
+ (void)IoSetCancelRoutine( Irp, NULL );
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
if (KeGetCurrentIrql() != Irql) {
DbgPrint("WARNING: IO COMPLETION RETURNED AT WRONG IRQL:\n");