]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
stream/regions: improve region shrinking 8521/head
authorVictor Julien <vjulien@oisf.net>
Fri, 3 Feb 2023 06:54:58 +0000 (07:54 +0100)
committerVictor Julien <vjulien@oisf.net>
Fri, 3 Feb 2023 07:32:00 +0000 (08:32 +0100)
Handle failure on shrink.

Keep size multiple of configured buf_size setting.

src/util-streaming-buffer.c

index 264cf171a42cc033bc64f6e6b76c1745109a9615..e23e26f2bc16522eba7883b54b6d90a982bc9eb7 100644 (file)
@@ -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