aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>2008-10-08 14:34:06 -0400
committerDavid S. Miller <davem@davemloft.net>2008-10-08 14:34:06 -0400
commit52cd5750e81ec8d213949fa7c0d2e08907bf498b (patch)
tree10e7a8127022e99bf6e729fe04420fa82a0997a8 /net/ipv6
parent2ca89cea5c9fdafd495fb840fa055383d253174e (diff)
tcp: fix length used for checksum in a reset
While looking for some common code I came across difference in checksum calculation between tcp_v6_send_(reset|ack) I couldn't explain. I checked both v4 and v6 and found out that both seem to have the same "feature". I couldn't find anything in rfc nor anywhere else which would state that md5 option should be ignored like it was in case of reset so I came to a conclusion that this is probably a genuine bug. I suspect that addition of md5 just was fooled by the excessive copy-paste code in those functions and the reset part was never tested well enough to find out the problem. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/tcp_ipv6.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 424d9c4a67ac..e8b0fdd9edb8 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1012,14 +1012,14 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
1012 } 1012 }
1013#endif 1013#endif
1014 1014
1015 buff->csum = csum_partial((char *)t1, sizeof(*t1), 0); 1015 buff->csum = csum_partial((char *)t1, tot_len, 0);
1016 1016
1017 memset(&fl, 0, sizeof(fl)); 1017 memset(&fl, 0, sizeof(fl));
1018 ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr); 1018 ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr);
1019 ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr); 1019 ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr);
1020 1020
1021 t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst, 1021 t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
1022 sizeof(*t1), IPPROTO_TCP, 1022 tot_len, IPPROTO_TCP,
1023 buff->csum); 1023 buff->csum);
1024 1024
1025 fl.proto = IPPROTO_TCP; 1025 fl.proto = IPPROTO_TCP;