From 8208eacd79ce0557db5a893188f49cc127d82660 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 30 Sep 2011 00:40:56 +0200 Subject: [PATCH] Convert stream memcaps to u64. Bug #332. --- src/stream-tcp-reassemble.c | 14 +++++++------- src/stream-tcp.c | 36 ++++++++++++++++++------------------ src/stream-tcp.h | 10 +++++----- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/stream-tcp-reassemble.c b/src/stream-tcp-reassemble.c index 800b036060..48bddaee6b 100644 --- a/src/stream-tcp-reassemble.c +++ b/src/stream-tcp-reassemble.c @@ -95,8 +95,8 @@ static uint16_t segment_pool_idx[65536]; /* O(1) lookups of the pool */ /* Memory use counters */ static SCSpinlock stream_reassembly_memuse_spinlock; -static uint32_t stream_reassembly_memuse; -static uint32_t stream_reassembly_memuse_max; +static uint64_t stream_reassembly_memuse; +static uint64_t stream_reassembly_memuse_max; /* prototypes */ static int HandleSegmentStartsBeforeListSegment(ThreadVars *, TcpReassemblyThreadCtx *, @@ -117,7 +117,7 @@ void StreamTcpReassemblePseudoPacketCreate(TcpStream *, Packet *, PacketQueue *) * * \param size Size of the TCP segment and its payload length memory allocated */ -void StreamTcpReassembleIncrMemuse(uint32_t size) { +void StreamTcpReassembleIncrMemuse(uint64_t size) { SCSpinLock(&stream_reassembly_memuse_spinlock); stream_reassembly_memuse += size; @@ -134,7 +134,7 @@ void StreamTcpReassembleIncrMemuse(uint32_t size) { * * \param size Size of the TCP segment and its payload length memory allocated */ -void StreamTcpReassembleDecrMemuse(uint32_t size) { +void StreamTcpReassembleDecrMemuse(uint64_t size) { SCSpinLock(&stream_reassembly_memuse_spinlock); if (size <= stream_reassembly_memuse) { @@ -161,7 +161,7 @@ int StreamTcpReassembleCheckMemcap(uint32_t size) { int ret = 0; SCSpinLock(&stream_reassembly_memuse_spinlock); - if (size + stream_reassembly_memuse <= stream_config.reassembly_memcap) + if (stream_config.reassembly_memcap == 0 || size + stream_reassembly_memuse <= stream_config.reassembly_memcap) ret = 1; SCSpinUnlock(&stream_reassembly_memuse_spinlock); @@ -350,8 +350,8 @@ void StreamTcpReassembleFree(char quiet) if (!quiet) { SCSpinLock(&stream_reassembly_memuse_spinlock); - SCLogInfo("Max memuse of the stream reassembly engine %"PRIu32" (in use" - " %"PRIu32")", stream_reassembly_memuse_max, + SCLogInfo("Max memuse of the stream reassembly engine %"PRIu64" (in use" + " %"PRIu64")", stream_reassembly_memuse_max, stream_reassembly_memuse); SCSpinUnlock(&stream_reassembly_memuse_spinlock); } diff --git a/src/stream-tcp.c b/src/stream-tcp.c index 3de6054e60..a86b38bc2e 100644 --- a/src/stream-tcp.c +++ b/src/stream-tcp.c @@ -109,8 +109,8 @@ static uint64_t ssn_pool_cnt = 0; /** counts ssns, protected by ssn_pool_mutex * extern uint8_t engine_mode; static SCSpinlock stream_memuse_spinlock; -static uint32_t stream_memuse; -static uint32_t stream_memuse_max; +static uint64_t stream_memuse = 0; +static uint64_t stream_memuse_max = 0; /* stream engine running in "inline" mode. */ int stream_inline = 0; @@ -126,18 +126,18 @@ void TmModuleStreamTcpRegister (void) tmm_modules[TMM_STREAMTCP].cap_flags = 0; } -void StreamTcpIncrMemuse(uint32_t size) { +void StreamTcpIncrMemuse(uint64_t size) { SCSpinLock(&stream_memuse_spinlock); - stream_memuse += size; + stream_memuse += (uint64_t)size; if (stream_memuse > stream_memuse_max) stream_memuse_max = stream_memuse; SCSpinUnlock(&stream_memuse_spinlock); } -void StreamTcpDecrMemuse(uint32_t size) { +void StreamTcpDecrMemuse(uint64_t size) { SCSpinLock(&stream_memuse_spinlock); - if (size <= stream_memuse) - stream_memuse -= size; + if ((uint64_t)size <= stream_memuse) + stream_memuse -= (uint64_t)size; else stream_memuse = 0; SCSpinUnlock(&stream_memuse_spinlock); @@ -149,12 +149,12 @@ void StreamTcpDecrMemuse(uint32_t size) { * \retval 1 if in bounds * \retval 0 if not in bounds */ -int StreamTcpCheckMemcap(uint32_t size) { +int StreamTcpCheckMemcap(uint64_t size) { SCEnter(); int ret = 0; SCSpinLock(&stream_memuse_spinlock); - if (size + stream_memuse <= stream_config.memcap) + if (stream_config.memcap == 0 || (size + stream_memuse) <= stream_config.memcap) ret = 1; SCSpinUnlock(&stream_memuse_spinlock); @@ -263,7 +263,7 @@ void *StreamTcpSessionPoolAlloc(void *null) memset(ptr, 0, sizeof(TcpSession)); - StreamTcpIncrMemuse((uint32_t)sizeof(TcpSession)); + StreamTcpIncrMemuse((uint64_t)sizeof(TcpSession)); return ptr; } @@ -309,7 +309,7 @@ void StreamTcpSessionPoolFree(void *s) SCFree(ssn); - StreamTcpDecrMemuse((uint32_t)sizeof(TcpSession)); + StreamTcpDecrMemuse((uint64_t)sizeof(TcpSession)); } @@ -353,13 +353,13 @@ void StreamTcpInitConfig(char quiet) } if ((ConfGetInt("stream.memcap", &value)) == 1) { - stream_config.memcap = (uint32_t)value; + stream_config.memcap = (uint64_t)value; } else { stream_config.memcap = STREAMTCP_DEFAULT_MEMCAP; } if (!quiet) { - SCLogInfo("stream \"memcap\": %"PRIu32"", stream_config.memcap); + SCLogInfo("stream \"memcap\": %"PRIu64, stream_config.memcap); } ConfGetBool("stream.midstream", &stream_config.midstream); @@ -402,12 +402,12 @@ void StreamTcpInitConfig(char quiet) } if ((ConfGetInt("stream.reassembly.memcap", &value)) == 1) { - stream_config.reassembly_memcap = (uint32_t)value; + stream_config.reassembly_memcap = (uint64_t)value; } else { stream_config.reassembly_memcap = STREAMTCP_DEFAULT_REASSEMBLY_MEMCAP; } if (!quiet) { - SCLogInfo("stream.reassembly \"memcap\": %"PRIu32"", stream_config.reassembly_memcap); + SCLogInfo("stream.reassembly \"memcap\": %"PRIu64"", stream_config.reassembly_memcap); } if ((ConfGetInt("stream.reassembly.depth", &value)) == 1) { @@ -486,7 +486,7 @@ void StreamTcpFreeConfig(char quiet) if (!quiet) { SCSpinLock(&stream_memuse_spinlock); - SCLogInfo("Max memuse of stream engine %"PRIu32" (in use %"PRIu32")", + SCLogInfo("Max memuse of stream engine %"PRIu64" (in use %"PRIu64")", stream_memuse_max, stream_memuse); SCSpinUnlock(&stream_memuse_spinlock); } @@ -7019,7 +7019,7 @@ end: if (stream_memuse == 0) { result &= 1; } else { - printf("stream_memuse %"PRIu32"\n", stream_memuse); + printf("stream_memuse %"PRIu64"\n", stream_memuse); } SCFree(p); return result; @@ -7107,7 +7107,7 @@ end: if (stream_memuse == 0) { result &= 1; } else { - printf("stream_memuse %"PRIu32"\n", stream_memuse); + printf("stream_memuse %"PRIu64"\n", stream_memuse); } SCFree(p); return result; diff --git a/src/stream-tcp.h b/src/stream-tcp.h index 92210c6122..78e5cf4568 100644 --- a/src/stream-tcp.h +++ b/src/stream-tcp.h @@ -45,13 +45,13 @@ typedef struct TcpStreamCnf_ { * * max stream mem usage */ - uint32_t memcap; + uint64_t memcap; + uint64_t reassembly_memcap; /**< max memory usage for stream reassembly */ uint32_t max_sessions; uint32_t prealloc_sessions; int midstream; int async_oneside; - uint32_t reassembly_memcap; /**< max memory usage for stream reassembly */ uint32_t reassembly_depth; /**< Depth until when we reassemble the stream */ uint16_t reassembly_toserver_chunk_size; @@ -91,9 +91,9 @@ void StreamTcpRegisterTests (void); void StreamTcpSessionPktFree (Packet *); -void StreamTcpIncrMemuse(uint32_t); -void StreamTcpDecrMemuse(uint32_t); -int StreamTcpCheckMemcap(uint32_t); +void StreamTcpIncrMemuse(uint64_t); +void StreamTcpDecrMemuse(uint64_t); +int StreamTcpCheckMemcap(uint64_t); void StreamTcpPseudoPacketSetupHeader(Packet *, Packet *); Packet *StreamTcpPseudoSetup(Packet *, uint8_t *, uint32_t);