diff options
author | KOVACS Krisztian <hidden@sch.bme.hu> | 2008-10-20 02:35:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-10-20 02:35:58 -0400 |
commit | fd5070370c74c32b7a98090eabb46c53baf41733 (patch) | |
tree | 092e6455cfc71285ca634331b81ffff8c03c4413 /net | |
parent | 92845ffd2a221f9f90b064ac55bb010bf27a193f (diff) |
tcp: Fix IPv6 fallout from 'Port redirection support for TCP'
'tcp: Port redirection support for TCP' (a3116ac5c) added a new member
to inet_request_sock() which inet_csk_clone() makes use of but failed
to add proper initialization to the IPv6 syncookie code and missed a
couple of places where the new member should be used instead of
inet_sk(sk)->sport.
Signed-off-by: KOVACS Krisztian <hidden@sch.bme.hu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/syncookies.c | 1 | ||||
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 6 |
2 files changed, 4 insertions, 3 deletions
diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c index ec394cf5a19b..676c80b5b14b 100644 --- a/net/ipv6/syncookies.c +++ b/net/ipv6/syncookies.c | |||
@@ -204,6 +204,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) | |||
204 | 204 | ||
205 | req->mss = mss; | 205 | req->mss = mss; |
206 | ireq->rmt_port = th->source; | 206 | ireq->rmt_port = th->source; |
207 | ireq->loc_port = th->dest; | ||
207 | ipv6_addr_copy(&ireq6->rmt_addr, &ipv6_hdr(skb)->saddr); | 208 | ipv6_addr_copy(&ireq6->rmt_addr, &ipv6_hdr(skb)->saddr); |
208 | ipv6_addr_copy(&ireq6->loc_addr, &ipv6_hdr(skb)->daddr); | 209 | ipv6_addr_copy(&ireq6->loc_addr, &ipv6_hdr(skb)->daddr); |
209 | if (ipv6_opt_accepted(sk, skb) || | 210 | if (ipv6_opt_accepted(sk, skb) || |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index e5310c9b84dc..b6b356b7912a 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -476,7 +476,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req) | |||
476 | fl.fl6_flowlabel = 0; | 476 | fl.fl6_flowlabel = 0; |
477 | fl.oif = treq->iif; | 477 | fl.oif = treq->iif; |
478 | fl.fl_ip_dport = inet_rsk(req)->rmt_port; | 478 | fl.fl_ip_dport = inet_rsk(req)->rmt_port; |
479 | fl.fl_ip_sport = inet_sk(sk)->sport; | 479 | fl.fl_ip_sport = inet_rsk(req)->loc_port; |
480 | security_req_classify_flow(req, &fl); | 480 | security_req_classify_flow(req, &fl); |
481 | 481 | ||
482 | opt = np->opt; | 482 | opt = np->opt; |
@@ -1309,7 +1309,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1309 | ipv6_addr_copy(&fl.fl6_src, &treq->loc_addr); | 1309 | ipv6_addr_copy(&fl.fl6_src, &treq->loc_addr); |
1310 | fl.oif = sk->sk_bound_dev_if; | 1310 | fl.oif = sk->sk_bound_dev_if; |
1311 | fl.fl_ip_dport = inet_rsk(req)->rmt_port; | 1311 | fl.fl_ip_dport = inet_rsk(req)->rmt_port; |
1312 | fl.fl_ip_sport = inet_sk(sk)->sport; | 1312 | fl.fl_ip_sport = inet_rsk(req)->loc_port; |
1313 | security_req_classify_flow(req, &fl); | 1313 | security_req_classify_flow(req, &fl); |
1314 | 1314 | ||
1315 | if (ip6_dst_lookup(sk, &dst, &fl)) | 1315 | if (ip6_dst_lookup(sk, &dst, &fl)) |
@@ -1865,7 +1865,7 @@ static void get_openreq6(struct seq_file *seq, | |||
1865 | i, | 1865 | i, |
1866 | src->s6_addr32[0], src->s6_addr32[1], | 1866 | src->s6_addr32[0], src->s6_addr32[1], |
1867 | src->s6_addr32[2], src->s6_addr32[3], | 1867 | src->s6_addr32[2], src->s6_addr32[3], |
1868 | ntohs(inet_sk(sk)->sport), | 1868 | ntohs(inet_rsk(req)->loc_port), |
1869 | dest->s6_addr32[0], dest->s6_addr32[1], | 1869 | dest->s6_addr32[0], dest->s6_addr32[1], |
1870 | dest->s6_addr32[2], dest->s6_addr32[3], | 1870 | dest->s6_addr32[2], dest->s6_addr32[3], |
1871 | ntohs(inet_rsk(req)->rmt_port), | 1871 | ntohs(inet_rsk(req)->rmt_port), |