|
@@ -1272,10 +1272,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
|
if (!want_cookie)
|
|
if (!want_cookie)
|
|
TCP_ECN_create_request(req, tcp_hdr(skb));
|
|
TCP_ECN_create_request(req, tcp_hdr(skb));
|
|
|
|
|
|
- if (want_cookie) {
|
|
|
|
- isn = cookie_v6_init_sequence(sk, skb, &req->mss);
|
|
|
|
- req->cookie_ts = tmp_opt.tstamp_ok;
|
|
|
|
- } else if (!isn) {
|
|
|
|
|
|
+ if (!isn) {
|
|
if (ipv6_opt_accepted(sk, skb) ||
|
|
if (ipv6_opt_accepted(sk, skb) ||
|
|
np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
|
|
np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
|
|
np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
|
|
np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
|
|
@@ -1288,8 +1285,12 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
|
if (!sk->sk_bound_dev_if &&
|
|
if (!sk->sk_bound_dev_if &&
|
|
ipv6_addr_type(&treq->rmt_addr) & IPV6_ADDR_LINKLOCAL)
|
|
ipv6_addr_type(&treq->rmt_addr) & IPV6_ADDR_LINKLOCAL)
|
|
treq->iif = inet6_iif(skb);
|
|
treq->iif = inet6_iif(skb);
|
|
-
|
|
|
|
- isn = tcp_v6_init_sequence(skb);
|
|
|
|
|
|
+ if (!want_cookie) {
|
|
|
|
+ isn = tcp_v6_init_sequence(skb);
|
|
|
|
+ } else {
|
|
|
|
+ isn = cookie_v6_init_sequence(sk, skb, &req->mss);
|
|
|
|
+ req->cookie_ts = tmp_opt.tstamp_ok;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
tcp_rsk(req)->snt_isn = isn;
|
|
tcp_rsk(req)->snt_isn = isn;
|
|
|
|
|