|
@@ -742,8 +742,9 @@ static void tcp_v4_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
|
|
|
* This still operates on a request_sock only, not on a big
|
|
|
* socket.
|
|
|
*/
|
|
|
-static int __tcp_v4_send_synack(struct sock *sk, struct request_sock *req,
|
|
|
- struct dst_entry *dst)
|
|
|
+static int __tcp_v4_send_synack(struct sock *sk, struct dst_entry *dst,
|
|
|
+ struct request_sock *req,
|
|
|
+ struct request_values *rvp)
|
|
|
{
|
|
|
const struct inet_request_sock *ireq = inet_rsk(req);
|
|
|
int err = -1;
|
|
@@ -753,7 +754,7 @@ static int __tcp_v4_send_synack(struct sock *sk, struct request_sock *req,
|
|
|
if (!dst && (dst = inet_csk_route_req(sk, req)) == NULL)
|
|
|
return -1;
|
|
|
|
|
|
- skb = tcp_make_synack(sk, dst, req);
|
|
|
+ skb = tcp_make_synack(sk, dst, req, rvp);
|
|
|
|
|
|
if (skb) {
|
|
|
struct tcphdr *th = tcp_hdr(skb);
|
|
@@ -774,9 +775,10 @@ static int __tcp_v4_send_synack(struct sock *sk, struct request_sock *req,
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static int tcp_v4_send_synack(struct sock *sk, struct request_sock *req)
|
|
|
+static int tcp_v4_send_synack(struct sock *sk, struct request_sock *req,
|
|
|
+ struct request_values *rvp)
|
|
|
{
|
|
|
- return __tcp_v4_send_synack(sk, req, NULL);
|
|
|
+ return __tcp_v4_send_synack(sk, NULL, req, rvp);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1211,13 +1213,13 @@ static struct timewait_sock_ops tcp_timewait_sock_ops = {
|
|
|
|
|
|
int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
|
|
{
|
|
|
- struct inet_request_sock *ireq;
|
|
|
struct tcp_options_received tmp_opt;
|
|
|
struct request_sock *req;
|
|
|
+ struct inet_request_sock *ireq;
|
|
|
+ struct dst_entry *dst = NULL;
|
|
|
__be32 saddr = ip_hdr(skb)->saddr;
|
|
|
__be32 daddr = ip_hdr(skb)->daddr;
|
|
|
__u32 isn = TCP_SKB_CB(skb)->when;
|
|
|
- struct dst_entry *dst = NULL;
|
|
|
#ifdef CONFIG_SYN_COOKIES
|
|
|
int want_cookie = 0;
|
|
|
#else
|
|
@@ -1337,7 +1339,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
|
|
}
|
|
|
tcp_rsk(req)->snt_isn = isn;
|
|
|
|
|
|
- if (__tcp_v4_send_synack(sk, req, dst) || want_cookie)
|
|
|
+ if (__tcp_v4_send_synack(sk, dst, req, NULL) || want_cookie)
|
|
|
goto drop_and_free;
|
|
|
|
|
|
inet_csk_reqsk_queue_hash_add(sk, req, TCP_TIMEOUT_INIT);
|