Supporting smaller TCP_INFO shapes optionally relaxing get_opt_sized response validation with strict flag #790
+20
−16
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.
Summary
Relax
getsockoptsize checking for TCP_INFO whose struct ABI can vary across kernel versions.Motivation
Some kernel socket options return versioned, kernel-defined structs whose size has grown over time. Older kernels legitimately return fewer bytes and update optlen accordingly, causing strict size == sizeof(T) checks to fail even though the returned data is valid. The problem here is inaccessibility of
TCP_INFOfrompingoraon certain kernel versions.Change
TCP_INFOinto this new behavior.Notes
When smaller sizes are allowed, zeroed fields may indicate that a field is absent rather than a true zero value. Note that this ambiguity can already exist today: a matching struct size does not guarantee that the kernel provides the same set of fields as the userspace
TCP_INFOdefinition.