Fix Returning of Stack Allocated Memory#29
Merged
Conversation
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.
Returning Stack-Allocated Pointers
This fixes an issue in
pingwhere stack-allocated memory are returned to the caller.Closes two critical code scanning alerts.
CodeQL
CodeQL detected an error in
src/ping.c. The rule says: This rule finds return statements that return pointers to an object allocated on the stack. The lifetime of a stack allocated memory location only lasts until the function returns, and the contents of that memory become undefined after that. Clearly, using a pointer to stack memory after the function has already returned will have undefined results.The reply header structs for ICMP and ICMP6 were both returned without allocating memory on the heap, which as mentioned in the rule has undefined behavior. The memory could be overwritten, leading to the data inside the struct being overwritten.
File Changes
src/ping.cstruct icmp *reply_hdringet_icmp4_reply_hdr()struct icmp *reply_hdringet_icmp6_reply_hdr()