]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
util/streaming-buffer: add extra safety check
authorPhilippe Antoine <pantoine@oisf.net>
Thu, 21 Nov 2024 14:20:44 +0000 (15:20 +0100)
committerVictor Julien <vjulien@oisf.net>
Wed, 11 Dec 2024 05:49:35 +0000 (06:49 +0100)
Ticket: 7393

Check if GrowRegionToSize is called with an argument
trying to shrink the region size, and if so do nothing,
ie do not try to shrink, and just return ok.

This way, we avoid a buffer overflow from memeset using an
unsigned having underflowed.

src/util-streaming-buffer.c

index a62bbf89567743ef385bcc1a58424100c306ab58..9ae3039087c8191f56c89002e812289108880ee4 100644 (file)
@@ -717,6 +717,10 @@ static inline int WARN_UNUSED GrowRegionToSize(StreamingBuffer *sb,
     /* try to grow in multiples of cfg->buf_size */
     const uint32_t grow = ToNextMultipleOf(size, cfg->buf_size);
     SCLogDebug("grow %u", grow);
+    if (grow <= region->buf_size) {
+        // do not try to shrink, and do not memset with diff having unsigned underflow
+        return SC_OK;
+    }
 
     void *ptr = REALLOC(cfg, region->buf, region->buf_size, grow);
     if (ptr == NULL) {