stream: count realloc in memcap

TCP memory cap was not taking into account the memory that can
be used by realloc of Packet headers in TCP segments.
pull/7430/head
Eric Leblond 5 years ago committed by Victor Julien
parent 0f14c55e52
commit 3908166f91

@ -595,9 +595,9 @@ static void StreamTcpSegmentAddPacketData(
* need to check that this is sufficient and allocate more memory if
* not.
*/
if (GET_PKT_LEN(rp) - p->payload_len > seg->pcap_hdr_storage->alloclen) {
uint8_t *tmp_pkt_hdr =
SCRealloc(seg->pcap_hdr_storage->pkt_hdr, GET_PKT_LEN(rp) - p->payload_len);
if (seg->pcap_hdr_storage->pktlen > seg->pcap_hdr_storage->alloclen) {
uint8_t *tmp_pkt_hdr = StreamTcpReassembleRealloc(seg->pcap_hdr_storage->pkt_hdr,
seg->pcap_hdr_storage->alloclen, seg->pcap_hdr_storage->pktlen);
if (tmp_pkt_hdr == NULL) {
SCLogDebug("Failed to realloc");
seg->pcap_hdr_storage->ts.tv_sec = 0;

@ -224,7 +224,7 @@ static void *ReassembleCalloc(size_t n, size_t size)
/*
void *(*Realloc)(void *ptr, size_t orig_size, size_t size);
*/
static void *ReassembleRealloc(void *optr, size_t orig_size, size_t size)
void *StreamTcpReassembleRealloc(void *optr, size_t orig_size, size_t size)
{
if (size > orig_size) {
if (StreamTcpReassembleCheckMemcap(size - orig_size) == 0)
@ -484,7 +484,7 @@ static int StreamTcpReassemblyConfig(bool quiet)
stream_config.sbcnf.buf_size = 2048;
stream_config.sbcnf.Malloc = ReassembleMalloc;
stream_config.sbcnf.Calloc = ReassembleCalloc;
stream_config.sbcnf.Realloc = ReassembleRealloc;
stream_config.sbcnf.Realloc = StreamTcpReassembleRealloc;
stream_config.sbcnf.Free = ReassembleFree;
return 0;

@ -85,6 +85,7 @@ void StreamTcpReassembleInitMemuse(void);
int StreamTcpReassembleHandleSegment(ThreadVars *, TcpReassemblyThreadCtx *, TcpSession *, TcpStream *, Packet *, PacketQueueNoLock *);
int StreamTcpReassembleInit(bool);
void StreamTcpReassembleFree(bool);
void *StreamTcpReassembleRealloc(void *optr, size_t orig_size, size_t size);
void StreamTcpReassembleRegisterTests(void);
TcpReassemblyThreadCtx *StreamTcpReassembleInitThreadCtx(ThreadVars *tv);
void StreamTcpReassembleFreeThreadCtx(TcpReassemblyThreadCtx *);

Loading…
Cancel
Save