int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr,
                   int family);
 struct tcp_md5sig_key *tcp_v4_md5_lookup(struct sock *sk,
-                                        struct sock *addr_sk);
+                                        const struct sock *addr_sk);
 
 #ifdef CONFIG_TCP_MD5SIG
 struct tcp_md5sig_key *tcp_md5_do_lookup(struct sock *sk,
 struct tcp_sock_af_ops {
 #ifdef CONFIG_TCP_MD5SIG
        struct tcp_md5sig_key   *(*md5_lookup) (struct sock *sk,
-                                               struct sock *addr_sk);
+                                               const struct sock *addr_sk);
        int             (*calc_md5_hash)(char *location,
                                         const struct tcp_md5sig_key *md5,
                                         const struct sock *sk,
 struct tcp_request_sock_ops {
        u16 mss_clamp;
 #ifdef CONFIG_TCP_MD5SIG
-       struct tcp_md5sig_key   *(*md5_lookup) (struct sock *sk,
-                                               struct request_sock *req);
+       struct tcp_md5sig_key *(*req_md5_lookup)(struct sock *sk,
+                                                const struct sock *addr_sk);
        int             (*calc_md5_hash) (char *location,
                                          const struct tcp_md5sig_key *md5,
                                          const struct sock *sk,
 
                                         const union tcp_md5_addr *addr,
                                         int family)
 {
-       struct tcp_sock *tp = tcp_sk(sk);
+       const struct tcp_sock *tp = tcp_sk(sk);
        struct tcp_md5sig_key *key;
        unsigned int size = sizeof(struct in_addr);
-       struct tcp_md5sig_info *md5sig;
+       const struct tcp_md5sig_info *md5sig;
 
        /* caller either holds rcu_read_lock() or socket lock */
        md5sig = rcu_dereference_check(tp->md5sig_info,
 EXPORT_SYMBOL(tcp_md5_do_lookup);
 
 struct tcp_md5sig_key *tcp_v4_md5_lookup(struct sock *sk,
-                                        struct sock *addr_sk)
+                                        const struct sock *addr_sk)
 {
        union tcp_md5_addr *addr;
 
-       addr = (union tcp_md5_addr *)&inet_sk(addr_sk)->inet_daddr;
+       addr = (union tcp_md5_addr *)&sk->sk_daddr;
        return tcp_md5_do_lookup(sk, addr, AF_INET);
 }
 EXPORT_SYMBOL(tcp_v4_md5_lookup);
 
-static struct tcp_md5sig_key *tcp_v4_reqsk_md5_lookup(struct sock *sk,
-                                                     struct request_sock *req)
-{
-       union tcp_md5_addr *addr;
-
-       addr = (union tcp_md5_addr *)&inet_rsk(req)->ir_rmt_addr;
-       return tcp_md5_do_lookup(sk, addr, AF_INET);
-}
-
 /* This can be called on a newly created socket, from other files */
 int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
                   int family, const u8 *newkey, u8 newkeylen, gfp_t gfp)
 static const struct tcp_request_sock_ops tcp_request_sock_ipv4_ops = {
        .mss_clamp      =       TCP_MSS_DEFAULT,
 #ifdef CONFIG_TCP_MD5SIG
-       .md5_lookup     =       tcp_v4_reqsk_md5_lookup,
+       .req_md5_lookup =       tcp_v4_md5_lookup,
        .calc_md5_hash  =       tcp_v4_md5_hash_skb,
 #endif
        .init_req       =       tcp_v4_init_req,
 
 
 #ifdef CONFIG_TCP_MD5SIG
        rcu_read_lock();
-       md5 = tcp_rsk(req)->af_specific->md5_lookup(sk, req);
+       md5 = tcp_rsk(req)->af_specific->req_md5_lookup(sk, req_to_sk(req));
 #endif
        tcp_header_size = tcp_synack_options(sk, req, mss, skb, &opts, md5,
                                             foc) + sizeof(*th);
 
 }
 
 static struct tcp_md5sig_key *tcp_v6_md5_lookup(struct sock *sk,
-                                               struct sock *addr_sk)
+                                               const struct sock *addr_sk)
 {
        return tcp_v6_md5_do_lookup(sk, &addr_sk->sk_v6_daddr);
 }
 
-static struct tcp_md5sig_key *tcp_v6_reqsk_md5_lookup(struct sock *sk,
-                                                     struct request_sock *req)
-{
-       return tcp_v6_md5_do_lookup(sk, &inet_rsk(req)->ir_v6_rmt_addr);
-}
-
 static int tcp_v6_parse_md5_keys(struct sock *sk, char __user *optval,
                                 int optlen)
 {
        .mss_clamp      =       IPV6_MIN_MTU - sizeof(struct tcphdr) -
                                sizeof(struct ipv6hdr),
 #ifdef CONFIG_TCP_MD5SIG
-       .md5_lookup     =       tcp_v6_reqsk_md5_lookup,
+       .req_md5_lookup =       tcp_v6_md5_lookup,
        .calc_md5_hash  =       tcp_v6_md5_hash_skb,
 #endif
        .init_req       =       tcp_v6_init_req,