From: Victor Julien Date: Fri, 3 Feb 2023 06:54:58 +0000 (+0100) Subject: stream/regions: improve region shrinking X-Git-Tag: suricata-7.0.0-rc2~593 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abf1ac8e01c88a34d9010bd565e19e2af5ae08c6;p=thirdparty%2Fsuricata.git stream/regions: improve region shrinking Handle failure on shrink. Keep size multiple of configured buf_size setting. --- diff --git a/src/util-streaming-buffer.c b/src/util-streaming-buffer.c index 264cf171a4..e23e26f2bc 100644 --- a/src/util-streaming-buffer.c +++ b/src/util-streaming-buffer.c @@ -749,13 +749,16 @@ static inline void StreamingBufferSlideToOffsetWithRegions( BUG_ON(to_shift->stream_offset > slide_offset); const uint32_t s = slide_offset - to_shift->stream_offset; if (s > 0) { - const uint32_t new_size = to_shift->buf_size - s; - SCLogDebug("s %u new_size %u", s, new_size); - memmove(to_shift->buf, to_shift->buf + s, new_size); - void *ptr = REALLOC(cfg, to_shift->buf, to_shift->buf_size, new_size); - BUG_ON(ptr == NULL); // TODO - to_shift->buf = ptr; - to_shift->buf_size = new_size; + const uint32_t new_data_size = to_shift->buf_size - s; + const uint32_t new_mem_size = ToNextMultipleOf(new_data_size, cfg->buf_size); + SCLogDebug("s %u new_data_size %u", s, new_data_size); + memmove(to_shift->buf, to_shift->buf + s, new_data_size); + /* shrink memory region. If this fails we keep the old */ + void *ptr = REALLOC(cfg, to_shift->buf, to_shift->buf_size, new_mem_size); + if (ptr != NULL) { + to_shift->buf = ptr; + to_shift->buf_size = new_mem_size; + } if (s < to_shift->buf_offset) to_shift->buf_offset -= s; else