diff options
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/input.c | 11 | ||||
-rw-r--r-- | net/sctp/output.c | 14 |
2 files changed, 12 insertions, 13 deletions
diff --git a/net/sctp/input.c b/net/sctp/input.c index 693fd080481..d2e98803ffe 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c | |||
@@ -83,14 +83,15 @@ static inline int sctp_rcv_checksum(struct sk_buff *skb) | |||
83 | { | 83 | { |
84 | struct sk_buff *list = skb_shinfo(skb)->frag_list; | 84 | struct sk_buff *list = skb_shinfo(skb)->frag_list; |
85 | struct sctphdr *sh = sctp_hdr(skb); | 85 | struct sctphdr *sh = sctp_hdr(skb); |
86 | __be32 cmp = sh->checksum; | 86 | __le32 cmp = sh->checksum; |
87 | __be32 val = sctp_start_cksum((__u8 *)sh, skb_headlen(skb)); | 87 | __le32 val; |
88 | __u32 tmp = sctp_start_cksum((__u8 *)sh, skb_headlen(skb)); | ||
88 | 89 | ||
89 | for (; list; list = list->next) | 90 | for (; list; list = list->next) |
90 | val = sctp_update_cksum((__u8 *)list->data, skb_headlen(list), | 91 | tmp = sctp_update_cksum((__u8 *)list->data, skb_headlen(list), |
91 | val); | 92 | tmp); |
92 | 93 | ||
93 | val = sctp_end_cksum(val); | 94 | val = sctp_end_cksum(tmp); |
94 | 95 | ||
95 | if (val != cmp) { | 96 | if (val != cmp) { |
96 | /* CRC failure, dump it. */ | 97 | /* CRC failure, dump it. */ |
diff --git a/net/sctp/output.c b/net/sctp/output.c index 2d65b7a7330..07d58903a74 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
@@ -367,7 +367,6 @@ int sctp_packet_transmit(struct sctp_packet *packet) | |||
367 | struct sctp_transport *tp = packet->transport; | 367 | struct sctp_transport *tp = packet->transport; |
368 | struct sctp_association *asoc = tp->asoc; | 368 | struct sctp_association *asoc = tp->asoc; |
369 | struct sctphdr *sh; | 369 | struct sctphdr *sh; |
370 | __be32 crc32 = cpu_to_be32(0); | ||
371 | struct sk_buff *nskb; | 370 | struct sk_buff *nskb; |
372 | struct sctp_chunk *chunk, *tmp; | 371 | struct sctp_chunk *chunk, *tmp; |
373 | struct sock *sk; | 372 | struct sock *sk; |
@@ -532,16 +531,15 @@ int sctp_packet_transmit(struct sctp_packet *packet) | |||
532 | * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>. | 531 | * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>. |
533 | */ | 532 | */ |
534 | if (!sctp_checksum_disable && !(dst->dev->features & NETIF_F_NO_CSUM)) { | 533 | if (!sctp_checksum_disable && !(dst->dev->features & NETIF_F_NO_CSUM)) { |
535 | crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len); | 534 | __u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len); |
536 | crc32 = sctp_end_cksum(crc32); | 535 | |
536 | /* 3) Put the resultant value into the checksum field in the | ||
537 | * common header, and leave the rest of the bits unchanged. | ||
538 | */ | ||
539 | sh->checksum = sctp_end_cksum(crc32); | ||
537 | } else | 540 | } else |
538 | nskb->ip_summed = CHECKSUM_UNNECESSARY; | 541 | nskb->ip_summed = CHECKSUM_UNNECESSARY; |
539 | 542 | ||
540 | /* 3) Put the resultant value into the checksum field in the | ||
541 | * common header, and leave the rest of the bits unchanged. | ||
542 | */ | ||
543 | sh->checksum = crc32; | ||
544 | |||
545 | /* IP layer ECN support | 543 | /* IP layer ECN support |
546 | * From RFC 2481 | 544 | * From RFC 2481 |
547 | * "The ECN-Capable Transport (ECT) bit would be set by the | 545 | * "The ECN-Capable Transport (ECT) bit would be set by the |