Gcc analyzer/v4 - #15634
Closed
victorjulien wants to merge 16 commits into
Closed
Conversation
To assist code analyzers. Gcc -fanalyzer got confused about it. Also test data pointer and length before calling fwrite and check the result better. Use a single atomic for the max open files check.
Code analyzer flagged FrameCopy as a possible source of UB due to
both pointers passed to memcpy being the same.
app-layer-frames.c: In function ‘FrameCopy’:
app-layer-frames.c:236:5: warning: overlapping buffers passed as arguments to ‘memcpy’ [-Wanalyzer-overlapping-buffers]
236 | memcpy(dst, src, sizeof(*dst));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
‘FramePrune’: events 1-8
│
│ 750 | static void FramePrune(Frames *frames, const TcpStream *stream, const bool eof)
│ | ^~~~~~~~~~
│ | |
│ | (1) entry to ‘FramePrune’
│......
│ 766 | for (uint16_t i = 0; i < frames->cnt; i++) {
│ | ~~~~~~~~~~~~~~~
│ | |
│ | (2) following ‘true’ branch... ─>─┐
│ | │
│ | │
│ |┌─────────────────────────────────────────────────────────────┘
│ 767 |│ if (i < FRAMES_STATIC_CNT) {
│ |│ ~
│ |│ |
│ |└──────────>(3) ...to here
│ | (4) following ‘true’ branch (when ‘i <= 2’)... ─>─┐
│ | │
│ | │
│ |┌─────────────────────────────────────────────────────────────┘
│ 768 |│ Frame *frame = &frames->sframes[i];
│ |│ ~~~~~~~~~~~~~~~~~~
│ |│ |
│ |└──────────────────────────────────────────>(5) ...to here
│ 769 | FrameDebug("prune(s)", frames, frame);
│ 770 | if (eof || FrameIsDone(frame, acked)) {
│ | ~
│ | |
│ | (6) following ‘false’ branch... ─>─┐
│ | │
│......
│ | │
│ |┌──────────────────────────────────────────────────┘
│ 779 |│ const uint64_t fle = FrameLeftEdge(stream, frame);
│ |│ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ |│ |
│ |└────────────────────────────────────>(7) ...to here
│ | (8) calling ‘FrameLeftEdge’ from ‘FramePrune’
│
└──> ‘FrameLeftEdge’: event 9
│
│ 257 | static inline uint64_t FrameLeftEdge(const TcpStream *stream, const Frame *frame)
│ | ^~~~~~~~~~~~~
│ | |
│ | (9) entry to ‘FrameLeftEdge’
│
‘FrameLeftEdge’: event 10
│
│suricata-common.h:323:27:
│ 323 | #define BUG_ON(x) assert(!(x))
│ | ^~~~~~
│ | |
│ | (10) following ‘false’ branch (when ‘frame_offset <= app_progress’)... ─>─┐
│ | │
util-validate.h:95:36: note: in expansion of macro ‘BUG_ON’
│ 95 | #define DEBUG_VALIDATE_BUG_ON(exp) BUG_ON((exp))
│ | ^~~~~~
app-layer-frames.c:266:5: note: in expansion of macro ‘DEBUG_VALIDATE_BUG_ON’
│ 266 | DEBUG_VALIDATE_BUG_ON(frame_offset > app_progress);
│ | ^~~~~~~~~~~~~~~~~~~~~
│
‘FrameLeftEdge’: event 11
│
│ | │
│ |┌────────────────────────────────────────────────────────────────────────────────────────────────────┘
│ 269 |│ if (frame->len < 0) {
│ |│ ~~~~~^~~~~
│ |│ |
│ |└────────────>(11) ...to here
│
<──────┘
│
‘FramePrune’: events 12-13
│
│ 779 | const uint64_t fle = FrameLeftEdge(stream, frame);
│ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ | |
│ | (12) returning to ‘FramePrune’ from ‘FrameLeftEdge’
│......
│ 783 | FrameCopy(nframe, frame);
│ | ~~~~~~~~~~~~~~~~~~~~~~~~
│ | |
│ | (13) calling ‘FrameCopy’ from ‘FramePrune’
│
└──> ‘FrameCopy’: events 14-15
│
│ 234 | static void FrameCopy(Frame *dst, Frame *src)
│ | ^~~~~~~~~
│ | |
│ | (14) entry to ‘FrameCopy’
│ 235 | {
│ 236 | memcpy(dst, src, sizeof(*dst));
│ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ | |
│ | (15) ⚠️ overlapping buffers passed as arguments to ‘memcpy’
│
In file included from suricata-common.h:129,
from app-layer-frames.c:25:
/usr/include/string.h:47:14: note: the behavior of ‘memcpy’ is undefined for overlapping buffers
47 | extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
| ^~~~~~
Work around TAILQ false positive.
Work around TAILQ false positive.
Addresses a gcc -fanalyzer warning.
Add debug validation statement to assert prev pointer is not NULL.
Helps address a gcc -fanalyzer warning.
Reopen file descriptor for lz4 with the init function. This helps code analyzers understand the handle it's leaked. Improve flow of profiling dumps to avoid analyzer confusion around the file descriptor. Suppress TAILQ related warnings.
By teaching about TAILQ.
The double strchr confused gcc -fanalyzer.
Avoids gcc -fanalyzer warning about out of bounds write to the array.
Help it understand TAILQ.
Pointer can't be NULL, so don't check it. Helps gcc analyzer as well.
Make sure to not run against lua rust crate build, as it's not clean.
Closed
jasonish
approved these changes
Jun 12, 2026
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #15634 +/- ##
==========================================
- Coverage 82.87% 82.87% -0.01%
==========================================
Files 1006 1006
Lines 273527 273570 +43
==========================================
+ Hits 226698 226733 +35
- Misses 46829 46837 +8
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
|
Information: QA ran without warnings. Pipeline = 32019 |
Merged
Member
Author
|
Merged in #15636, thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Gcc analyzer fixes and CI test.
Replace #15612, fix an log-pcap error handling case.