From: Victor Julien Date: Tue, 13 Jun 2023 09:25:20 +0000 (+0200) Subject: streaming/buffer: turn BUG_ON's into validate checks X-Git-Tag: suricata-7.0.0-rc2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55c6c45ea75325d39c27a32fddd21443f28c6b42;p=thirdparty%2Fsuricata.git streaming/buffer: turn BUG_ON's into validate checks --- diff --git a/src/util-streaming-buffer.c b/src/util-streaming-buffer.c index 3956e7ccf9..fe6b9f70f1 100644 --- a/src/util-streaming-buffer.c +++ b/src/util-streaming-buffer.c @@ -426,7 +426,7 @@ static inline void ConsolidateFwd(StreamingBuffer *sb, const StreamingBufferConf region->buf_size); if (sa->offset == region->stream_offset && sa_re > (region->stream_offset + region->buf_offset)) { - BUG_ON(sa_re < region->stream_offset); + DEBUG_VALIDATE_BUG_ON(sa_re < region->stream_offset); region->buf_offset = sa_re - region->stream_offset; SCLogDebug("-> (fwd) tr %p %" PRIu64 "/%u region %p so %" PRIu64 " bo %u sz %u BUF_OFFSET UPDATED", @@ -456,7 +456,7 @@ static inline void ConsolidateFwd(StreamingBuffer *sb, const StreamingBufferConf region->buf_size); if (sa->offset == region->stream_offset && sa_re > (region->stream_offset + region->buf_offset)) { - BUG_ON(sa_re < region->stream_offset); + DEBUG_VALIDATE_BUG_ON(sa_re < region->stream_offset); region->buf_offset = sa_re - region->stream_offset; SCLogDebug("-> (fwd) tr %p %" PRIu64 "/%u region %p so %" PRIu64 " bo %u sz %u BUF_OFFSET UPDATED", @@ -523,7 +523,7 @@ static inline void ConsolidateBackward(StreamingBuffer *sb, const StreamingBuffe if (sa->offset == region->stream_offset && sa_re > (region->stream_offset + region->buf_offset)) { - BUG_ON(sa_re < region->stream_offset); + DEBUG_VALIDATE_BUG_ON(sa_re < region->stream_offset); region->buf_offset = sa_re - region->stream_offset; SCLogDebug("-> (bwd) tr %p %" PRIu64 "/%u region %p so %" PRIu64 " bo %u sz %u BUF_OFFSET UPDATED", @@ -555,7 +555,7 @@ static inline void ConsolidateBackward(StreamingBuffer *sb, const StreamingBuffe region->buf_size); if (sa->offset == region->stream_offset && sa_re > (region->stream_offset + region->buf_offset)) { - BUG_ON(sa_re < region->stream_offset); + DEBUG_VALIDATE_BUG_ON(sa_re < region->stream_offset); region->buf_offset = sa_re - region->stream_offset; SCLogDebug("-> (bwd) tr %p %" PRIu64 "/%u region %p so %" PRIu64 " bo %u sz %u BUF_OFFSET UPDATED", @@ -632,7 +632,7 @@ static void SBBPrune(StreamingBuffer *sb, const StreamingBufferConfig *cfg) SCLogDebug("set buf_offset?"); if (sbb->offset == sb->region.stream_offset) { SCLogDebug("set buf_offset to first sbb len %u", sbb->len); - BUG_ON(sbb->len > sb->region.buf_size); + DEBUG_VALIDATE_BUG_ON(sbb->len > sb->region.buf_size); sb->region.buf_offset = sbb->len; } } @@ -654,7 +654,7 @@ static void SBBPrune(StreamingBuffer *sb, const StreamingBufferConfig *cfg) sb->head = sbb; if (sbb->offset == sb->region.stream_offset) { SCLogDebug("set buf_offset to first sbb len %u", sbb->len); - BUG_ON(sbb->len > sb->region.buf_size); + DEBUG_VALIDATE_BUG_ON(sbb->len > sb->region.buf_size); sb->region.buf_offset = sbb->len; } break; @@ -772,7 +772,7 @@ static inline void StreamingBufferSlideToOffsetWithRegions( StreamingBuffer *sb, const StreamingBufferConfig *cfg, const uint64_t slide_offset) { ListRegions(sb); - BUG_ON(slide_offset == sb->region.stream_offset); + DEBUG_VALIDATE_BUG_ON(slide_offset == sb->region.stream_offset); SCLogDebug("slide_offset %" PRIu64, slide_offset); SCLogDebug("main: offset %" PRIu64 " buf %p size %u offset %u", sb->region.stream_offset, @@ -803,13 +803,13 @@ static inline void StreamingBufferSlideToOffsetWithRegions( if (RegionBeforeOffset(r, slide_offset)) { SCLogDebug("r %p so %" PRIu64 ", re %" PRIu64 " -> before", r, r->stream_offset, r->stream_offset + r->buf_offset); - BUG_ON(r == &sb->region); + DEBUG_VALIDATE_BUG_ON(r == &sb->region); prev->next = next; FREE(cfg, r->buf, r->buf_size); FREE(cfg, r, sizeof(*r)); sb->regions--; - BUG_ON(sb->regions == 0); + DEBUG_VALIDATE_BUG_ON(sb->regions == 0); } else if (RegionContainsOffset(r, slide_offset)) { SCLogDebug("r %p so %" PRIu64 ", re %" PRIu64 " -> within", r, r->stream_offset, r->stream_offset + r->buf_offset); @@ -821,7 +821,7 @@ static inline void StreamingBufferSlideToOffsetWithRegions( SCLogDebug("r %p so %" PRIu64 ", re %" PRIu64 " -> post", r, r->stream_offset, r->stream_offset + r->buf_offset); /* implied beyond slide offset */ - BUG_ON(r->stream_offset < slide_offset); + DEBUG_VALIDATE_BUG_ON(r->stream_offset < slide_offset); break; } r = next; @@ -837,7 +837,7 @@ static inline void StreamingBufferSlideToOffsetWithRegions( SCLogDebug("main: offset %" PRIu64 " buf %p size %u offset %u", to_shift->stream_offset, to_shift->buf, to_shift->buf_size, to_shift->buf_offset); if (to_shift != &sb->region) { - BUG_ON(sb->region.buf != NULL); + DEBUG_VALIDATE_BUG_ON(sb->region.buf != NULL); sb->region.buf = to_shift->buf; sb->region.stream_offset = to_shift->stream_offset; @@ -848,11 +848,11 @@ static inline void StreamingBufferSlideToOffsetWithRegions( FREE(cfg, to_shift, sizeof(*to_shift)); to_shift = &sb->region; sb->regions--; - BUG_ON(sb->regions == 0); + DEBUG_VALIDATE_BUG_ON(sb->regions == 0); } // Do the shift. If new region is exactly at the slide offset we can skip this. - BUG_ON(to_shift->stream_offset > slide_offset); + DEBUG_VALIDATE_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_data_size = to_shift->buf_size - s; @@ -915,7 +915,7 @@ static inline void StreamingBufferSlideToOffsetWithRegions( // free "next" FREE(cfg, next, sizeof(*next)); sb->regions--; - BUG_ON(sb->regions == 0); + DEBUG_VALIDATE_BUG_ON(sb->regions == 0); goto done; } else { /* using "main", expand to include "next" */ @@ -946,7 +946,7 @@ static inline void StreamingBufferSlideToOffsetWithRegions( FREE(cfg, next->buf, next->buf_size); FREE(cfg, next, sizeof(*next)); sb->regions--; - BUG_ON(sb->regions == 0); + DEBUG_VALIDATE_BUG_ON(sb->regions == 0); goto done; } } @@ -996,12 +996,12 @@ void StreamingBufferSlideToOffset( #ifdef DEBUG SBBPrintList(sb); #endif - BUG_ON(sb->region.buf != NULL && sb->region.buf_size == 0); - BUG_ON(sb->region.buf_offset > sb->region.buf_size); - BUG_ON(offset > sb->region.stream_offset); - BUG_ON(sb->head && sb->head->offset == sb->region.stream_offset && - sb->head->len > sb->region.buf_offset); - BUG_ON(sb->region.stream_offset < offset); + DEBUG_VALIDATE_BUG_ON(sb->region.buf != NULL && sb->region.buf_size == 0); + DEBUG_VALIDATE_BUG_ON(sb->region.buf_offset > sb->region.buf_size); + DEBUG_VALIDATE_BUG_ON(offset > sb->region.stream_offset); + DEBUG_VALIDATE_BUG_ON(sb->head && sb->head->offset == sb->region.stream_offset && + sb->head->len > sb->region.buf_offset); + DEBUG_VALIDATE_BUG_ON(sb->region.stream_offset < offset); return; } @@ -1043,7 +1043,7 @@ void StreamingBufferSlideToOffset( #ifdef DEBUG SBBPrintList(sb); #endif - BUG_ON(sb->region.stream_offset < offset); + DEBUG_VALIDATE_BUG_ON(sb->region.stream_offset < offset); } #define DATA_FITS(sb, len) ((sb)->region.buf_offset + (len) <= (sb)->region.buf_size) @@ -1051,7 +1051,7 @@ void StreamingBufferSlideToOffset( int StreamingBufferAppend(StreamingBuffer *sb, const StreamingBufferConfig *cfg, StreamingBufferSegment *seg, const uint8_t *data, uint32_t data_len) { - BUG_ON(seg == NULL); + DEBUG_VALIDATE_BUG_ON(seg == NULL); if (sb->region.buf == NULL) { if (InitBuffer(sb, cfg) == -1) @@ -1253,7 +1253,7 @@ static StreamingBufferRegion *BufferInsertAtRegionConsolidate(StreamingBuffer *s memcpy(dst->buf, src_start->buf, src_start->buf_offset); if (src_start == src_end) { SCLogDebug("src_start == src_end == main, we're done"); - BUG_ON(src_start != dst); + DEBUG_VALIDATE_BUG_ON(src_start != dst); return src_start; } prev = src_start; @@ -1276,15 +1276,15 @@ static StreamingBufferRegion *BufferInsertAtRegionConsolidate(StreamingBuffer *s } const uint32_t target_offset = r->stream_offset - dst_offset; SCLogDebug("r %p: target_offset %u", r, target_offset); - BUG_ON(target_offset > dst->buf_size); - BUG_ON(target_offset + r->buf_size > dst->buf_size); + DEBUG_VALIDATE_BUG_ON(target_offset > dst->buf_size); + DEBUG_VALIDATE_BUG_ON(target_offset + r->buf_size > dst->buf_size); memcpy(dst->buf + target_offset, r->buf, r->buf_size); StreamingBufferRegion *next = r->next; FREE(cfg, r->buf, r->buf_size); FREE(cfg, r, sizeof(*r)); sb->regions--; - BUG_ON(sb->regions == 0); + DEBUG_VALIDATE_BUG_ON(sb->regions == 0); DEBUG_VALIDATE_BUG_ON(prev == NULL && src_start != &sb->region); if (prev != NULL) { @@ -1303,7 +1303,7 @@ static StreamingBufferRegion *BufferInsertAtRegionConsolidate(StreamingBuffer *s * region we expand. In this case we'll have main and dst. We will * move the buffer from dst into main and free dst. */ if (start_is_main && dst != &sb->region) { - BUG_ON(sb->region.next != dst); + DEBUG_VALIDATE_BUG_ON(sb->region.next != dst); SCLogDebug("start_is_main && dst != main region"); FREE(cfg, sb->region.buf, sb->region.buf_size); sb->region.buf = dst->buf; @@ -1314,7 +1314,7 @@ static StreamingBufferRegion *BufferInsertAtRegionConsolidate(StreamingBuffer *s FREE(cfg, dst, sizeof(*dst)); dst = &sb->region; sb->regions--; - BUG_ON(sb->regions == 0); + DEBUG_VALIDATE_BUG_ON(sb->regions == 0); } else { SCLogDebug("dst: %p next %p", dst, dst->next); } @@ -1461,7 +1461,7 @@ int StreamingBufferInsertAt(StreamingBuffer *sb, const StreamingBufferConfig *cf { int r; - BUG_ON(seg == NULL); + DEBUG_VALIDATE_BUG_ON(seg == NULL); DEBUG_VALIDATE_BUG_ON(offset < sb->region.stream_offset); if (offset < sb->region.stream_offset) { return SC_EINVAL; @@ -1562,11 +1562,11 @@ int StreamingBufferInsertAt(StreamingBuffer *sb, const StreamingBufferConfig *cf if ((r = SBBUpdate(sb, cfg, region, rel_offset, data_len)) != SC_OK) return r; } - BUG_ON(!region_is_main && sb->head == NULL); + DEBUG_VALIDATE_BUG_ON(!region_is_main && sb->head == NULL); ListRegions(sb); if (RB_EMPTY(&sb->sbb_tree)) { - BUG_ON(offset + data_len > sb->region.stream_offset + sb->region.buf_offset); + DEBUG_VALIDATE_BUG_ON(offset + data_len > sb->region.stream_offset + sb->region.buf_offset); } return SC_OK; @@ -1621,7 +1621,7 @@ void StreamingBufferSBBGetData(const StreamingBuffer *sb, SCLogDebug("1"); uint64_t offset = sbb->offset - region->stream_offset; *data = region->buf + offset; - BUG_ON(offset + sbb->len > region->buf_size); + DEBUG_VALIDATE_BUG_ON(offset + sbb->len > region->buf_size); *data_len = sbb->len; return; } else { @@ -1665,14 +1665,14 @@ void StreamingBufferSBBGetDataAtOffset(const StreamingBuffer *sb, *data_len = region->buf_size - data_offset; else *data_len = sbblen; - BUG_ON(*data_len > sbblen); + DEBUG_VALIDATE_BUG_ON(*data_len > sbblen); return; } else { uint64_t data_offset = region->stream_offset - sbb->offset; if (data_offset < sbblen) { *data = region->buf; *data_len = sbblen - data_offset; - BUG_ON(*data_len > sbblen); + DEBUG_VALIDATE_BUG_ON(*data_len > sbblen); return; } }