ipv6: syncookies: do not skip ->iif initialization
Subsystems (3)
PATCH 1/1 ipv6: syncookies: do not skip ->iif initialization
When syncookies are in effect, req->iif is left uninitialized. In case of e.g. link-local addresses the route lookup then fails and no syn-ack is sent.
Rearrange things so ->iif is also initialized in the syncookie case.
want_cookie can only be true when the isn was zero, thus move the want_cookie check into the "!isn" branch.
--- net/ipv6/tcp_ipv6.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-)
net/ipv6/tcp_ipv6.c +7 -6
@@ -1272,10 +1272,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)if (!want_cookie)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) || np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo || 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 &&ipv6_addr_type (&treq->rmt_addr) &IPV6_ADDR_LINKLOCAL ) 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;
Signature · 1 line
1.6.4.4
From: Florian Westphal <[email protected]>
Date: Sun, 13 Jun 2010 23:29:39 +0200
Quoted 11 lines
When syncookies are in effect,
req->iifis left uninitialized. In case of e.g. link-local addresses the route lookup then fails and no syn-ack is sent.Rearrange things so ->iif is also initialized in the syncookie case.
want_cookiecan only be true when the isn was zero, thus move thewant_cookiecheck into the "!isn" branch.Cc Glenn Griffin <[email protected]>Signed-off-by Florian Westphal <[email protected]>
Applied, thanks.