sctp: Change sctp to implement csum_levels
CHECKSUM_UNNECESSARY may be applied to the SCTP CRC so we need to appropriate account for this by decrementing csum_level. This is done by calling __skb_dec_checksum_unnecessary. Signed-off-by: Tom Herbert <therbert@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
662880f442
commit
202863fe4c
@ -133,9 +133,13 @@ int sctp_rcv(struct sk_buff *skb)
|
|||||||
__skb_pull(skb, skb_transport_offset(skb));
|
__skb_pull(skb, skb_transport_offset(skb));
|
||||||
if (skb->len < sizeof(struct sctphdr))
|
if (skb->len < sizeof(struct sctphdr))
|
||||||
goto discard_it;
|
goto discard_it;
|
||||||
if (!sctp_checksum_disable && !skb_csum_unnecessary(skb) &&
|
|
||||||
sctp_rcv_checksum(net, skb) < 0)
|
skb->csum_valid = 0; /* Previous value not applicable */
|
||||||
|
if (skb_csum_unnecessary(skb))
|
||||||
|
__skb_decr_checksum_unnecessary(skb);
|
||||||
|
else if (!sctp_checksum_disable && sctp_rcv_checksum(net, skb) < 0)
|
||||||
goto discard_it;
|
goto discard_it;
|
||||||
|
skb->csum_valid = 1;
|
||||||
|
|
||||||
skb_pull(skb, sizeof(struct sctphdr));
|
skb_pull(skb, sizeof(struct sctphdr));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user