mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
- Change STATUS_UNSUCCESSFUL to STATUS_FILE_CLOSED
- Move the Irp->Cancel check after SocketAcquireStateLock to fix a possible crash - Change STATUS_INVALID_PARAMETER to STATUS_FILE_CLOSED - Move SocketAcquireStateLock in front of the check for a NULL return from LockRequest to prevent another possible crash svn path=/branches/aicom-network-fixes/; revision=35419
This commit is contained in:
@@ -83,20 +83,19 @@ static NTSTATUS NTAPI ListenComplete
|
||||
( PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
PVOID Context ) {
|
||||
NTSTATUS Status = STATUS_UNSUCCESSFUL;
|
||||
NTSTATUS Status = STATUS_FILE_CLOSED;
|
||||
PAFD_FCB FCB = (PAFD_FCB)Context;
|
||||
PAFD_TDI_OBJECT_QELT Qelt;
|
||||
|
||||
if ( Irp->Cancel ) {
|
||||
/* FIXME: is this anything else we need to do? */
|
||||
FCB->ListenIrp.InFlightRequest = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||
|
||||
FCB->ListenIrp.InFlightRequest = NULL;
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||
SocketStateUnlock( FCB );
|
||||
DestroySocket( FCB );
|
||||
|
||||
@@ -262,7 +262,7 @@ NTSTATUS NTAPI UnlockAndMaybeComplete
|
||||
|
||||
|
||||
NTSTATUS LostSocket( PIRP Irp ) {
|
||||
NTSTATUS Status = STATUS_INVALID_PARAMETER;
|
||||
NTSTATUS Status = STATUS_FILE_CLOSED;
|
||||
AFD_DbgPrint(MIN_TRACE,("Called.\n"));
|
||||
Irp->IoStatus.Information = 0;
|
||||
Irp->IoStatus.Status = Status;
|
||||
|
||||
@@ -449,7 +449,7 @@ PacketSocketRecvComplete(
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_UNSUCCESSFUL;
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
|
||||
|
||||
@@ -277,6 +277,10 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
(PAFD_EVENT_SELECT_INFO)LockRequest( Irp, IrpSp );
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) {
|
||||
return LostSocket( Irp );
|
||||
}
|
||||
|
||||
if ( !EventSelectInfo ) {
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
||||
0, NULL );
|
||||
@@ -285,10 +289,6 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
EventSelectInfo->EventObject,
|
||||
EventSelectInfo->Events));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) {
|
||||
return LostSocket( Irp );
|
||||
}
|
||||
|
||||
FCB->EventSelectTriggers = FCB->EventsFired = 0;
|
||||
if( FCB->EventSelect ) ObDereferenceObject( FCB->EventSelect );
|
||||
FCB->EventSelect = NULL;
|
||||
@@ -325,15 +325,15 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) {
|
||||
return LostSocket( Irp );
|
||||
}
|
||||
|
||||
if ( !EnumReq ) {
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
||||
0, NULL );
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) {
|
||||
return LostSocket( Irp );
|
||||
}
|
||||
|
||||
EnumReq->PollEvents = FCB->PollState;
|
||||
RtlZeroMemory( EnumReq->EventStatus, sizeof(EnumReq->EventStatus) );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user