diff options
Diffstat (limited to 'net/ipv6')
| -rw-r--r-- | net/ipv6/syncookies.c | 28 | ||||
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 3 |
2 files changed, 17 insertions, 14 deletions
diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c index c46da533888a..612fc53e0bb9 100644 --- a/net/ipv6/syncookies.c +++ b/net/ipv6/syncookies.c | |||
| @@ -184,13 +184,6 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) | |||
| 184 | 184 | ||
| 185 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESRECV); | 185 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESRECV); |
| 186 | 186 | ||
| 187 | /* check for timestamp cookie support */ | ||
| 188 | memset(&tcp_opt, 0, sizeof(tcp_opt)); | ||
| 189 | tcp_parse_options(skb, &tcp_opt, 0); | ||
| 190 | |||
| 191 | if (tcp_opt.saw_tstamp) | ||
| 192 | cookie_check_timestamp(&tcp_opt); | ||
| 193 | |||
| 194 | ret = NULL; | 187 | ret = NULL; |
| 195 | req = inet6_reqsk_alloc(&tcp6_request_sock_ops); | 188 | req = inet6_reqsk_alloc(&tcp6_request_sock_ops); |
| 196 | if (!req) | 189 | if (!req) |
| @@ -224,12 +217,6 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) | |||
| 224 | req->expires = 0UL; | 217 | req->expires = 0UL; |
| 225 | req->retrans = 0; | 218 | req->retrans = 0; |
| 226 | ireq->ecn_ok = 0; | 219 | ireq->ecn_ok = 0; |
| 227 | ireq->snd_wscale = tcp_opt.snd_wscale; | ||
| 228 | ireq->rcv_wscale = tcp_opt.rcv_wscale; | ||
| 229 | ireq->sack_ok = tcp_opt.sack_ok; | ||
| 230 | ireq->wscale_ok = tcp_opt.wscale_ok; | ||
| 231 | ireq->tstamp_ok = tcp_opt.saw_tstamp; | ||
| 232 | req->ts_recent = tcp_opt.saw_tstamp ? tcp_opt.rcv_tsval : 0; | ||
| 233 | treq->rcv_isn = ntohl(th->seq) - 1; | 220 | treq->rcv_isn = ntohl(th->seq) - 1; |
| 234 | treq->snt_isn = cookie; | 221 | treq->snt_isn = cookie; |
| 235 | 222 | ||
| @@ -265,6 +252,21 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) | |||
| 265 | goto out_free; | 252 | goto out_free; |
| 266 | } | 253 | } |
| 267 | 254 | ||
| 255 | /* check for timestamp cookie support */ | ||
| 256 | memset(&tcp_opt, 0, sizeof(tcp_opt)); | ||
| 257 | tcp_parse_options(skb, &tcp_opt, 0, dst); | ||
| 258 | |||
| 259 | if (tcp_opt.saw_tstamp) | ||
| 260 | cookie_check_timestamp(&tcp_opt); | ||
| 261 | |||
| 262 | req->ts_recent = tcp_opt.saw_tstamp ? tcp_opt.rcv_tsval : 0; | ||
| 263 | |||
| 264 | ireq->snd_wscale = tcp_opt.snd_wscale; | ||
| 265 | ireq->rcv_wscale = tcp_opt.rcv_wscale; | ||
| 266 | ireq->sack_ok = tcp_opt.sack_ok; | ||
| 267 | ireq->wscale_ok = tcp_opt.wscale_ok; | ||
| 268 | ireq->tstamp_ok = tcp_opt.saw_tstamp; | ||
| 269 | |||
| 268 | req->window_clamp = tp->window_clamp ? :dst_metric(dst, RTAX_WINDOW); | 270 | req->window_clamp = tp->window_clamp ? :dst_metric(dst, RTAX_WINDOW); |
| 269 | tcp_select_initial_window(tcp_full_space(sk), req->mss, | 271 | tcp_select_initial_window(tcp_full_space(sk), req->mss, |
| 270 | &req->rcv_wnd, &req->window_clamp, | 272 | &req->rcv_wnd, &req->window_clamp, |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index c54ec3615ded..34925f089e07 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
| @@ -1167,6 +1167,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
| 1167 | struct tcp_sock *tp = tcp_sk(sk); | 1167 | struct tcp_sock *tp = tcp_sk(sk); |
| 1168 | struct request_sock *req = NULL; | 1168 | struct request_sock *req = NULL; |
| 1169 | __u32 isn = TCP_SKB_CB(skb)->when; | 1169 | __u32 isn = TCP_SKB_CB(skb)->when; |
| 1170 | struct dst_entry *dst = __sk_dst_get(sk); | ||
| 1170 | #ifdef CONFIG_SYN_COOKIES | 1171 | #ifdef CONFIG_SYN_COOKIES |
| 1171 | int want_cookie = 0; | 1172 | int want_cookie = 0; |
| 1172 | #else | 1173 | #else |
| @@ -1205,7 +1206,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
| 1205 | tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr); | 1206 | tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr); |
| 1206 | tmp_opt.user_mss = tp->rx_opt.user_mss; | 1207 | tmp_opt.user_mss = tp->rx_opt.user_mss; |
| 1207 | 1208 | ||
| 1208 | tcp_parse_options(skb, &tmp_opt, 0); | 1209 | tcp_parse_options(skb, &tmp_opt, 0, dst); |
| 1209 | 1210 | ||
| 1210 | if (want_cookie && !tmp_opt.saw_tstamp) | 1211 | if (want_cookie && !tmp_opt.saw_tstamp) |
| 1211 | tcp_clear_options(&tmp_opt); | 1212 | tcp_clear_options(&tmp_opt); |
