fix: prevent DeadlineExceeded from poisoning dial cache#529
Open
AuditeMarlow wants to merge 1 commit intoprojectdiscovery:mainfrom
Open
fix: prevent DeadlineExceeded from poisoning dial cache#529AuditeMarlow wants to merge 1 commit intoprojectdiscovery:mainfrom
AuditeMarlow wants to merge 1 commit intoprojectdiscovery:mainfrom
Conversation
…rmanent error dialAllParallel misclassified context.DeadlineExceeded (and in one path, context.Canceled) as ErrPortClosedOrFiltered. This caused transient timeouts to be cached as permanent failures, blocking all subsequent connections to that host:port for the rest of the scan. Add DeadlineExceeded and Canceled guards at all three classification points in dialwrap.go so only genuine connection-refused errors are treated as permanent.
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.
Fixes #530
Problem
When a dial attempt fails due to a context deadline or cancellation (transient),
dialAllParallelwraps it asErrPortClosedOrFiltered(permanent). This poisons the shared dial cache — every subsequent connection to that host:port fails immediately for the rest of the scan, even with a fresh context.Solution
Add
context.DeadlineExceededandcontext.Canceledguards at all three error-classification points indialwrap.goso only genuine connection-refused errors are cached as permanent.Summary
dialAllParallelline 277: filterDeadlineExceededfrom the permanent-error bucketdialAllParallelline 296: filterCanceledandDeadlineExceededbefore wrapping asErrPortClosedOrFilteredDialContextline 156: treatDeadlineExceededas transient (retry instead of returning cached error)