diff options
-rw-r--r-- | include/net/inet_sock.h | 9 | ||||
-rw-r--r-- | net/dccp/ipv4.c | 3 | ||||
-rw-r--r-- | net/dccp/ipv6.c | 3 | ||||
-rw-r--r-- | net/ipv4/syncookies.c | 3 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 3 | ||||
-rw-r--r-- | net/ipv6/syncookies.c | 3 |
6 files changed, 11 insertions, 13 deletions
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index c9ed91891887..cf7abb00941b 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
@@ -244,16 +244,19 @@ static inline unsigned int __inet_ehashfn(const __be32 laddr, | |||
244 | initval); | 244 | initval); |
245 | } | 245 | } |
246 | 246 | ||
247 | static inline struct request_sock *inet_reqsk_alloc(struct request_sock_ops *ops) | 247 | static inline struct request_sock * |
248 | inet_reqsk_alloc(const struct request_sock_ops *ops, struct sock *sk_listener) | ||
248 | { | 249 | { |
249 | struct request_sock *req = reqsk_alloc(ops); | 250 | struct request_sock *req = reqsk_alloc(ops); |
250 | struct inet_request_sock *ireq = inet_rsk(req); | ||
251 | 251 | ||
252 | if (req != NULL) { | 252 | if (req) { |
253 | struct inet_request_sock *ireq = inet_rsk(req); | ||
254 | |||
253 | kmemcheck_annotate_bitfield(ireq, flags); | 255 | kmemcheck_annotate_bitfield(ireq, flags); |
254 | ireq->opt = NULL; | 256 | ireq->opt = NULL; |
255 | atomic64_set(&ireq->ir_cookie, 0); | 257 | atomic64_set(&ireq->ir_cookie, 0); |
256 | ireq->ireq_state = TCP_NEW_SYN_RECV; | 258 | ireq->ireq_state = TCP_NEW_SYN_RECV; |
259 | write_pnet(&ireq->ireq_net, sock_net(sk_listener)); | ||
257 | 260 | ||
258 | /* Following is temporary. It is coupled with debugging | 261 | /* Following is temporary. It is coupled with debugging |
259 | * helpers in reqsk_put() & reqsk_free() | 262 | * helpers in reqsk_put() & reqsk_free() |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index 7f6456afbaec..bf897829f4f0 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
@@ -624,7 +624,7 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
624 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) | 624 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
625 | goto drop; | 625 | goto drop; |
626 | 626 | ||
627 | req = inet_reqsk_alloc(&dccp_request_sock_ops); | 627 | req = inet_reqsk_alloc(&dccp_request_sock_ops, sk); |
628 | if (req == NULL) | 628 | if (req == NULL) |
629 | goto drop; | 629 | goto drop; |
630 | 630 | ||
@@ -641,7 +641,6 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
641 | ireq = inet_rsk(req); | 641 | ireq = inet_rsk(req); |
642 | ireq->ir_loc_addr = ip_hdr(skb)->daddr; | 642 | ireq->ir_loc_addr = ip_hdr(skb)->daddr; |
643 | ireq->ir_rmt_addr = ip_hdr(skb)->saddr; | 643 | ireq->ir_rmt_addr = ip_hdr(skb)->saddr; |
644 | write_pnet(&ireq->ireq_net, sock_net(sk)); | ||
645 | ireq->ireq_family = AF_INET; | 644 | ireq->ireq_family = AF_INET; |
646 | ireq->ir_iif = sk->sk_bound_dev_if; | 645 | ireq->ir_iif = sk->sk_bound_dev_if; |
647 | 646 | ||
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index 5166b0043f95..d7e7c7b0a3f1 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c | |||
@@ -386,7 +386,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
386 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) | 386 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
387 | goto drop; | 387 | goto drop; |
388 | 388 | ||
389 | req = inet_reqsk_alloc(&dccp6_request_sock_ops); | 389 | req = inet_reqsk_alloc(&dccp6_request_sock_ops, sk); |
390 | if (req == NULL) | 390 | if (req == NULL) |
391 | goto drop; | 391 | goto drop; |
392 | 392 | ||
@@ -403,7 +403,6 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
403 | ireq = inet_rsk(req); | 403 | ireq = inet_rsk(req); |
404 | ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; | 404 | ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; |
405 | ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; | 405 | ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; |
406 | write_pnet(&ireq->ireq_net, sock_net(sk)); | ||
407 | ireq->ireq_family = AF_INET6; | 406 | ireq->ireq_family = AF_INET6; |
408 | 407 | ||
409 | if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) || | 408 | if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) || |
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c index 5ae0c49f5e2e..eb940750bb1b 100644 --- a/net/ipv4/syncookies.c +++ b/net/ipv4/syncookies.c | |||
@@ -325,7 +325,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) | |||
325 | goto out; | 325 | goto out; |
326 | 326 | ||
327 | ret = NULL; | 327 | ret = NULL; |
328 | req = inet_reqsk_alloc(&tcp_request_sock_ops); /* for safety */ | 328 | req = inet_reqsk_alloc(&tcp_request_sock_ops, sk); /* for safety */ |
329 | if (!req) | 329 | if (!req) |
330 | goto out; | 330 | goto out; |
331 | 331 | ||
@@ -346,7 +346,6 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) | |||
346 | req->ts_recent = tcp_opt.saw_tstamp ? tcp_opt.rcv_tsval : 0; | 346 | req->ts_recent = tcp_opt.saw_tstamp ? tcp_opt.rcv_tsval : 0; |
347 | treq->snt_synack = tcp_opt.saw_tstamp ? tcp_opt.rcv_tsecr : 0; | 347 | treq->snt_synack = tcp_opt.saw_tstamp ? tcp_opt.rcv_tsecr : 0; |
348 | treq->listener = NULL; | 348 | treq->listener = NULL; |
349 | write_pnet(&ireq->ireq_net, sock_net(sk)); | ||
350 | ireq->ireq_family = AF_INET; | 349 | ireq->ireq_family = AF_INET; |
351 | 350 | ||
352 | ireq->ir_iif = sk->sk_bound_dev_if; | 351 | ireq->ir_iif = sk->sk_bound_dev_if; |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 7257eb206c07..2a480f6811ea 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -6004,7 +6004,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops, | |||
6004 | goto drop; | 6004 | goto drop; |
6005 | } | 6005 | } |
6006 | 6006 | ||
6007 | req = inet_reqsk_alloc(rsk_ops); | 6007 | req = inet_reqsk_alloc(rsk_ops, sk); |
6008 | if (!req) | 6008 | if (!req) |
6009 | goto drop; | 6009 | goto drop; |
6010 | 6010 | ||
@@ -6020,7 +6020,6 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops, | |||
6020 | 6020 | ||
6021 | tmp_opt.tstamp_ok = tmp_opt.saw_tstamp; | 6021 | tmp_opt.tstamp_ok = tmp_opt.saw_tstamp; |
6022 | tcp_openreq_init(req, &tmp_opt, skb, sk); | 6022 | tcp_openreq_init(req, &tmp_opt, skb, sk); |
6023 | write_pnet(&inet_rsk(req)->ireq_net, sock_net(sk)); | ||
6024 | 6023 | ||
6025 | /* Note: tcp_v6_init_req() might override ir_iif for link locals */ | 6024 | /* Note: tcp_v6_init_req() might override ir_iif for link locals */ |
6026 | inet_rsk(req)->ir_iif = sk->sk_bound_dev_if; | 6025 | inet_rsk(req)->ir_iif = sk->sk_bound_dev_if; |
diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c index 58875ce8e178..039e74dd29fe 100644 --- a/net/ipv6/syncookies.c +++ b/net/ipv6/syncookies.c | |||
@@ -189,14 +189,13 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) | |||
189 | goto out; | 189 | goto out; |
190 | 190 | ||
191 | ret = NULL; | 191 | ret = NULL; |
192 | req = inet_reqsk_alloc(&tcp6_request_sock_ops); | 192 | req = inet_reqsk_alloc(&tcp6_request_sock_ops, sk); |
193 | if (!req) | 193 | if (!req) |
194 | goto out; | 194 | goto out; |
195 | 195 | ||
196 | ireq = inet_rsk(req); | 196 | ireq = inet_rsk(req); |
197 | treq = tcp_rsk(req); | 197 | treq = tcp_rsk(req); |
198 | treq->listener = NULL; | 198 | treq->listener = NULL; |
199 | write_pnet(&ireq->ireq_net, sock_net(sk)); | ||
200 | ireq->ireq_family = AF_INET6; | 199 | ireq->ireq_family = AF_INET6; |
201 | 200 | ||
202 | if (security_inet_conn_request(sk, skb, req)) | 201 | if (security_inet_conn_request(sk, skb, req)) |