tcpv[46]: fix md5 pseudoheader address field ordering
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Thu, 9 Oct 2008 21:37:47 +0000 (14:37 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Oct 2008 21:37:47 +0000 (14:37 -0700)
Maybe it's just me but I guess those md5 people made a mess
out of it by having *_md5_hash_* to use daddr, saddr order
instead of the one that is natural (and equal to what csum
functions use). For the segment were sending, the original
addresses are reversed so buff's saddr == skb's daddr and
vice-versa.

Maybe I can finally proceed with unification of some code
after fixing it first... :-)

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_ipv4.c
net/ipv6/tcp_ipv6.c

index ba46769c6e97ead6e0c24cf127b20d72b87dc461..5c8fa7f1e327821dbcb378244e8674183025906c 100644 (file)
@@ -583,8 +583,8 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb)
                rep.th.doff = arg.iov[0].iov_len / 4;
 
                tcp_v4_md5_hash_hdr((__u8 *) &rep.opt[1],
-                                    key, ip_hdr(skb)->daddr,
-                                    ip_hdr(skb)->saddr, &rep.th);
+                                    key, ip_hdr(skb)->saddr,
+                                    ip_hdr(skb)->daddr, &rep.th);
        }
 #endif
        arg.csum = csum_tcpudp_nofold(ip_hdr(skb)->daddr,
index dd7bdde7bddcb3f535d758aa3d2699c77939114b..eab10bc7ff87a0ac567936a24597cd2f22067e69 100644 (file)
@@ -1007,8 +1007,8 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
                               (TCPOPT_MD5SIG << 8) |
                               TCPOLEN_MD5SIG);
                tcp_v6_md5_hash_hdr((__u8 *)&opt[1], key,
-                                   &ipv6_hdr(skb)->daddr,
-                                   &ipv6_hdr(skb)->saddr, t1);
+                                   &ipv6_hdr(skb)->saddr,
+                                   &ipv6_hdr(skb)->daddr, t1);
        }
 #endif