stream: increase memcap on memory errors

pull/6324/head
Eric Leblond 4 years ago committed by Victor Julien
parent 0e70958e67
commit c1bffa9545

@ -67,6 +67,10 @@ int TcpSegmentCompare(struct TcpSegment *a, struct TcpSegment *b)
* \param seg segment to store stream offset in
* \param data segment data after overlap handling (if any)
* \param data_len data length
*
* \return 0 on success
* \return -1 on memory allocation error
* \return negative value on other errors
*/
static inline int InsertSegmentDataCustom(TcpStream *stream, TcpSegment *seg, uint8_t *data, uint16_t data_len)
{
@ -91,11 +95,10 @@ static inline int InsertSegmentDataCustom(TcpStream *stream, TcpSegment *seg, ui
SCReturnInt(0);
}
if (StreamingBufferInsertAt(&stream->sb, &seg->sbseg,
data + data_offset,
data_len - data_offset,
stream_offset) != 0) {
SCReturnInt(-1);
int ret = StreamingBufferInsertAt(
&stream->sb, &seg->sbseg, data + data_offset, data_len - data_offset, stream_offset);
if (ret != 0) {
SCReturnInt(ret);
}
#ifdef DEBUG
{
@ -540,7 +543,11 @@ static int DoHandleData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx,
/* insert the temp buffer now that we've (possibly) updated
* it to account for the overlap policies */
if (InsertSegmentDataCustom(stream, handle, buf, p->payload_len) < 0) {
int res = InsertSegmentDataCustom(stream, handle, buf, p->payload_len);
if (res < 0) {
if (res == -1) {
StatsIncr(tv, ra_ctx->counter_tcp_segment_memcap);
}
return -1;
}
@ -575,6 +582,9 @@ int StreamTcpReassembleInsertSegment(ThreadVars *tv, TcpReassemblyThreadCtx *ra_
/* no overlap, straight data insert */
int res = InsertSegmentDataCustom(stream, seg, pkt_data, pkt_datalen);
if (res < 0) {
if (res == -1) {
StatsIncr(tv, ra_ctx->counter_tcp_segment_memcap);
}
StatsIncr(tv, ra_ctx->counter_tcp_reass_data_normal_fail);
StreamTcpRemoveSegmentFromStream(stream, seg);
StreamTcpSegmentReturntoPool(seg);

Loading…
Cancel
Save