From 2044568591d1fef4c320ea86de732010ce748cee Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 6 Sep 2008 21:30:09 +0000 Subject: [PATCH] - Make PortsStartup return NTSTATUS so we can make sure memory allocated succeeded - Change the callers to check the return status svn path=/branches/aicom-network-fixes/; revision=36006 --- lib/drivers/ip/network/ports.c | 4 +++- lib/drivers/ip/transport/tcp/tcp.c | 6 +++++- lib/drivers/ip/transport/udp/udp.c | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/drivers/ip/network/ports.c b/lib/drivers/ip/network/ports.c index e78c00af65f..04ec39946c4 100644 --- a/lib/drivers/ip/network/ports.c +++ b/lib/drivers/ip/network/ports.c @@ -10,7 +10,7 @@ #include "precomp.h" -VOID PortsStartup( PPORT_SET PortSet, +NTSTATUS PortsStartup( PPORT_SET PortSet, UINT StartingPort, UINT PortsToManage ) { PortSet->StartingPort = StartingPort; @@ -19,11 +19,13 @@ VOID PortsStartup( PPORT_SET PortSet, PortSet->PortsToOversee - 1; PortSet->ProtoBitBuffer = PoolAllocateBuffer( (PortSet->PortsToOversee + 7) / 8 ); + if(!PortSet->ProtoBitBuffer) return STATUS_INSUFFICIENT_RESOURCES; RtlInitializeBitMap( &PortSet->ProtoBitmap, PortSet->ProtoBitBuffer, PortSet->PortsToOversee ); RtlClearAllBits( &PortSet->ProtoBitmap ); ExInitializeFastMutex( &PortSet->Mutex ); + return STATUS_SUCCESS; } VOID PortsShutdown( PPORT_SET PortSet ) { diff --git a/lib/drivers/ip/transport/tcp/tcp.c b/lib/drivers/ip/transport/tcp/tcp.c index c6657fd0407..33a47c356d8 100644 --- a/lib/drivers/ip/transport/tcp/tcp.c +++ b/lib/drivers/ip/transport/tcp/tcp.c @@ -455,7 +455,11 @@ NTSTATUS TCPStartup(VOID) return Status; } - PortsStartup( &TCPPorts, 1, 0xfffe ); + Status = PortsStartup( &TCPPorts, 1, 0xfffe ); + if( !NT_SUCCESS(Status) ) { + TCPMemShutdown(); + return Status; + } RegisterOskitTCPEventHandlers( &EventHandlers ); InitOskitTCP(); diff --git a/lib/drivers/ip/transport/udp/udp.c b/lib/drivers/ip/transport/udp/udp.c index 1dba3035179..b666c5410fd 100644 --- a/lib/drivers/ip/transport/udp/udp.c +++ b/lib/drivers/ip/transport/udp/udp.c @@ -302,8 +302,12 @@ NTSTATUS UDPStartup( #ifdef __NTDRIVER__ RtlZeroMemory(&UDPStats, sizeof(UDP_STATISTICS)); #endif + + NTSTATUS Status; - PortsStartup( &UDPPorts, 1, 0xfffe ); + Status = PortsStartup( &UDPPorts, 1, 0xfffe ); + + if( !NT_SUCCESS(Status) ) return Status; /* Register this protocol with IP layer */ IPRegisterProtocol(IPPROTO_UDP, UDPReceive);