tcp: Fix MD5 signature checking on IPv4 mapped sockets
Subsystems (3)
PATCH 1/1 tcp: Fix MD5 signature checking on IPv4 mapped sockets
Fix MD5 signature checking so that an IPv4 active open to an IPv6 socket can succeed. In particular, use the correct address family's signature generation function for the SYN/ACK.
Reported-by Stephen Hemminger <[email protected]>
Signed-off-by John Dykstra <[email protected]>
--- include/net/tcp.h | 5 +++++ net/ipv4/tcp_ipv4.c | 1 + net/ipv4/tcp_output.c | 3 ++- net/ipv6/tcp_ipv6.c | 1 + 4 files changed, 9 insertions(+), 1 deletions(-)
include/net/tcp.h +5 -0
@@ -1425,6 +1425,11 @@ struct tcp_request_sock_ops {#ifdef CONFIG_TCP_MD5SIG struct tcp_md5sig_key *(*md5_lookup) (struct sock *sk,struct request_sock *req); +int (*calc_md5_hash) (char *location, +struct tcp_md5sig_key *md5, +struct sock *sk, +struct request_sock *req, +struct sk_buff *skb);#endif };
net/ipv4/tcp_ipv4.c +1 -0
@@ -1160,6 +1160,7 @@ struct request_sock_ops tcp_request_sock_ops __read_mostly = {#ifdef CONFIG_TCP_MD5SIG static struct tcp_request_sock_ops tcp_request_sock_ipv4_ops = { .md5_lookup = tcp_v4_reqsk_md5_lookup, + .calc_md5_hash = tcp_v4_md5_hash_skb, };#endif
net/ipv4/tcp_output.c +2 -1
@@ -2261,7 +2261,8 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,#ifdef CONFIG_TCP_MD5SIG /* Okay, we have all we need - do the md5 hash if needed */ if (md5) { - tp->af_specific->calc_md5_hash (md5_hash_location, +tcp_rsk (req)->af_specific->calc_md5_hash (md5_hash_location, + md5,NULL , req, skb); }#endif
net/ipv6/tcp_ipv6.c +1 -0
@@ -896,6 +896,7 @@ struct request_sock_ops tcp6_request_sock_ops __read_mostly = {#ifdef CONFIG_TCP_MD5SIG static struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = { .md5_lookup = tcp_v6_reqsk_md5_lookup, + .calc_md5_hash = tcp_v6_md5_hash_skb, };#endif
Signature · 1 line
1.5.4.3