netstack/ipv4: drop TTL=1 packets instead of forwarding with TTL=0#13521
Open
TristanInSec wants to merge 1 commit into
Open
netstack/ipv4: drop TTL=1 packets instead of forwarding with TTL=0#13521TristanInSec wants to merge 1 commit into
TristanInSec wants to merge 1 commit into
Conversation
The TTL check in forwardUnicastPacket uses ttl == 0, so packets arriving with TTL=1 pass the check, get decremented to TTL=0 in forwardPacketWithRoute, and are forwarded with a zero TTL. There is no post-decrement TTL check. Linux ip_forward() checks ip_hdr(skb)->ttl <= 1 before forwarding, which correctly drops TTL=1 packets and sends ICMP Time Exceeded. Change the pre-decrement check from ttl == 0 to ttl <= 1 so that packets that would reach zero after the mandatory decrement are dropped with an ICMP Time Exceeded response.
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.
The TTL check in forwardUnicastPacket uses
ttl == 0, so packets arriving with TTL=1 pass the check, get decremented to TTL=0 in forwardPacketWithRoute, and are forwarded with a zero TTL. There is no post-decrement TTL check.Linux
ip_forward()checksip_hdr(skb)->ttl <= 1before forwarding, which correctly drops TTL=1 packets and sends ICMP Time Exceeded.This changes the pre-decrement check from
ttl == 0tottl <= 1so that packets that would reach zero after the mandatory decrement are dropped with an ICMP Time Exceeded response.