net: Clarify meaning of CHECKSUM_PARTIAL for receive path
The current meaning of CHECKSUM_PARTIAL for validating checksums is that _all_ checksums in the packet are considered valid. However, in the manner that CHECKSUM_PARTIAL is set only the checksum at csum_start+csum_offset and any preceding checksums may be considered valid. If there are checksums in the packet after csum_offset it is possible they have not been verfied. This patch changes CHECKSUM_PARTIAL logic in skb_csum_unnecessary and __skb_gro_checksum_validate_needed to only considered checksums referring to csum_start and any preceding checksums (with starting offset before csum_start) to be verified. Signed-off-by: Tom Herbert <therbert@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
26c4f7da3e
commit
6edec0e61b
@@ -2246,7 +2246,9 @@ static inline bool __skb_gro_checksum_validate_needed(struct sk_buff *skb,
|
||||
bool zero_okay,
|
||||
__sum16 check)
|
||||
{
|
||||
return (skb->ip_summed != CHECKSUM_PARTIAL &&
|
||||
return ((skb->ip_summed != CHECKSUM_PARTIAL ||
|
||||
skb_checksum_start_offset(skb) <
|
||||
skb_gro_offset(skb)) &&
|
||||
NAPI_GRO_CB(skb)->csum_cnt == 0 &&
|
||||
(!zero_okay || check));
|
||||
}
|
||||
|
Reference in New Issue
Block a user