ip: enhance ip header validation #177
Merged
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 current code assumes that the hardware performs the following checks:
However, these assumptions are incorrect, at least with the tap driver. The following packets can be created using Scapy:
If the correct routes are configured, grout will forward these packets instead of discarding them, in violation of RFC1812.
The DPDK driver can provide hardware information about the checksum (which is already used to validate the IP checksum) and packet type. There are two packet types for IPv4:
When one of these flags is set, it indicates that the IHL and version of the packet are valid. Otherwise, software validation is necessary.
As for the packet length requirement to accommodate the minimum legal IP datagram length (20 bytes), there is no guarantee that the hardware will validate it. Therefore, this validation must be performed in software.
Fixes: 5f5de2c ("ip4_lookup: comply with rfc1812")