diff --git a/src/stream-tcp-reassemble.c b/src/stream-tcp-reassemble.c index 65de6175f7..737ec5f38e 100644 --- a/src/stream-tcp-reassemble.c +++ b/src/stream-tcp-reassemble.c @@ -163,8 +163,7 @@ int StreamTcpReassembleCheckMemcap(uint32_t size) { /** \brief alloc a tcp segment pool entry */ void *TcpSegmentPoolAlloc() { - if (StreamTcpReassembleCheckMemcap((uint32_t)sizeof(TcpSegment)) == 0) - { + if (StreamTcpReassembleCheckMemcap((uint32_t)sizeof(TcpSegment)) == 0) { return NULL; } @@ -179,10 +178,16 @@ void *TcpSegmentPoolAlloc() int TcpSegmentPoolInit(void *data, void *payload_len) { TcpSegment *seg = (TcpSegment *) data; + uint16_t size = *((uint16_t *) payload_len); + + if (StreamTcpReassembleCheckMemcap((uint32_t)size + (uint32_t)sizeof(TcpSegment)) == 0) { + SCFree(seg); + return 0; + } memset(seg, 0, sizeof (TcpSegment)); - seg->pool_size = *((uint16_t *) payload_len); + seg->pool_size = size; seg->payload_len = seg->pool_size; seg->payload = SCMalloc(seg->payload_len);