All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] tcp: fix race condition when creating child sockets from syncookies
@ 2020-11-09 16:11 Ricardo Dias
  2020-11-09 16:29 ` Eric Dumazet
  0 siblings, 1 reply; 5+ messages in thread
From: Ricardo Dias @ 2020-11-09 16:11 UTC (permalink / raw)
  To: davem, kuba, kuznet, yoshfuji, edumazet; +Cc: netdev, linux-kernel

When the TCP stack is in SYN flood mode, the server child socket is
created from the SYN cookie received in a TCP packet with the ACK flag
set.

The child socket is created when the server receives the first TCP
packet with a valid SYN cookie from the client. Usually, this packet
corresponds to the final step of the TCP 3-way handshake, the ACK
packet. But is also possible to receive a valid SYN cookie from the
first TCP data packet sent by the client, and thus create a child socket
from that SYN cookie.

Since a client socket is ready to send data as soon as it receives the
SYN+ACK packet from the server, the client can send the ACK packet (sent
by the TCP stack code), and the first data packet (sent by the userspace
program) almost at the same time, and thus the server will equally
receive the two TCP packets with valid SYN cookies almost at the same
instant.

When such event happens, the TCP stack code has a race condition that
occurs between the momement a lookup is done to the established
connections hashtable to check for the existence of a connection for the
same client, and the moment that the child socket is added to the
established connections hashtable. As a consequence, this race condition
can lead to a situation where we add two child sockets to the
established connections hashtable and deliver two sockets to the
userspace program to the same client.

This patch fixes the race condition by checking if an existing child
socket exists for the same client when we are adding the second child
socket to the established connections socket. If an existing child
socket exists, we return that socket and use it to process the TCP
packet received, and discard the second child socket to the same client.

Signed-off-by: Ricardo Dias <rdias@memsql.com>
Reported-by: kernel test robot <lkp@intel.com>
---
v2 (2020-11-09):
* Changed the author's email domain.
* Removed the helper function inet_ehash_insert_chk_dup and moved the
  logic to the existing inet_ehash_insert.
* Updated the callers of iner_ehash_nolisten to deal with the new
  logic.


 include/net/inet_hashtables.h |  6 ++--
 net/dccp/ipv4.c               |  4 ++-
 net/dccp/ipv6.c               |  4 ++-
 net/ipv4/inet_hashtables.c    | 63 +++++++++++++++++++++++++++++------
 net/ipv4/syncookies.c         |  5 ++-
 net/ipv4/tcp_ipv4.c           | 12 ++++++-
 net/ipv6/tcp_ipv6.c           | 19 ++++++++++-
 7 files changed, 94 insertions(+), 19 deletions(-)

diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h
index 92560974ea67..dffa345d52a7 100644
--- a/include/net/inet_hashtables.h
+++ b/include/net/inet_hashtables.h
@@ -247,9 +247,9 @@ void inet_hashinfo2_init(struct inet_hashinfo *h, const char *name,
 			 unsigned long high_limit);
 int inet_hashinfo2_init_mod(struct inet_hashinfo *h);
 
-bool inet_ehash_insert(struct sock *sk, struct sock *osk);
-bool inet_ehash_nolisten(struct sock *sk, struct sock *osk);
-int __inet_hash(struct sock *sk, struct sock *osk);
+bool inet_ehash_insert(struct sock *sk, struct sock **osk);
+bool inet_ehash_nolisten(struct sock *sk, struct sock **osk);
+int __inet_hash(struct sock *sk, struct sock **osk);
 int inet_hash(struct sock *sk);
 void inet_unhash(struct sock *sk);
 
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index 9c28c8251125..99bbba478991 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -400,6 +400,7 @@ struct sock *dccp_v4_request_recv_sock(const struct sock *sk,
 	struct inet_request_sock *ireq;
 	struct inet_sock *newinet;
 	struct sock *newsk;
+	struct sock *osk;
 
 	if (sk_acceptq_is_full(sk))
 		goto exit_overflow;
@@ -427,7 +428,8 @@ struct sock *dccp_v4_request_recv_sock(const struct sock *sk,
 
 	if (__inet_inherit_port(sk, newsk) < 0)
 		goto put_and_exit;
-	*own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
+	osk = req_to_sk(req_unhash);
+	*own_req = inet_ehash_nolisten(newsk, &osk);
 	if (*own_req)
 		ireq->ireq_opt = NULL;
 	else
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
index ef4ab28cfde0..91a825c00a97 100644
--- a/net/dccp/ipv6.c
+++ b/net/dccp/ipv6.c
@@ -407,6 +407,7 @@ static struct sock *dccp_v6_request_recv_sock(const struct sock *sk,
 	struct inet_sock *newinet;
 	struct dccp6_sock *newdp6;
 	struct sock *newsk;
+	struct sock *osk;
 
 	if (skb->protocol == htons(ETH_P_IP)) {
 		/*
@@ -533,7 +534,8 @@ static struct sock *dccp_v6_request_recv_sock(const struct sock *sk,
 		dccp_done(newsk);
 		goto out;
 	}
-	*own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
+	osk = req_to_sk(req_unhash);
+	*own_req = inet_ehash_nolisten(newsk, &osk);
 	/* Clone pktoptions received with SYN, if we own the req */
 	if (*own_req && ireq->pktopts) {
 		newnp->pktoptions = skb_clone(ireq->pktopts, GFP_ATOMIC);
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
index 239e54474b65..8d62b22b9a95 100644
--- a/net/ipv4/inet_hashtables.c
+++ b/net/ipv4/inet_hashtables.c
@@ -510,17 +510,27 @@ static u32 inet_sk_port_offset(const struct sock *sk)
 					  inet->inet_dport);
 }
 
-/* insert a socket into ehash, and eventually remove another one
- * (The another one can be a SYN_RECV or TIMEWAIT
+/* Insert a socket into ehash, and eventually remove another one
+ * (The another one can be a SYN_RECV or TIMEWAIT)
+ * If an existing socket already exists, it returns that socket
+ * through the osk parameter.
  */
-bool inet_ehash_insert(struct sock *sk, struct sock *osk)
+bool inet_ehash_insert(struct sock *sk, struct sock **osk)
 {
 	struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
 	struct hlist_nulls_head *list;
 	struct inet_ehash_bucket *head;
-	spinlock_t *lock;
+	const struct hlist_nulls_node *node;
+	struct sock *esk;
+	spinlock_t *lock; /* protects hashinfo socket entry */
+	struct net *net = sock_net(sk);
+	const int dif = sk->sk_bound_dev_if;
+	const int sdif = sk->sk_bound_dev_if;
 	bool ret = true;
 
+	INET_ADDR_COOKIE(acookie, sk->sk_daddr, sk->sk_rcv_saddr);
+	const __portpair ports = INET_COMBINED_PORTS(sk->sk_dport, sk->sk_num);
+
 	WARN_ON_ONCE(!sk_unhashed(sk));
 
 	sk->sk_hash = sk_ehashfn(sk);
@@ -529,17 +539,48 @@ bool inet_ehash_insert(struct sock *sk, struct sock *osk)
 	lock = inet_ehash_lockp(hashinfo, sk->sk_hash);
 
 	spin_lock(lock);
-	if (osk) {
-		WARN_ON_ONCE(sk->sk_hash != osk->sk_hash);
-		ret = sk_nulls_del_node_init_rcu(osk);
+	if (osk && *osk) {
+		WARN_ON_ONCE(sk->sk_hash != (*osk)->sk_hash);
+		ret = sk_nulls_del_node_init_rcu(*osk);
+	} else if (osk && !*osk) {
+begin:
+		sk_nulls_for_each_rcu(esk, node, list) {
+			if (esk->sk_hash != sk->sk_hash)
+				continue;
+			if (likely(INET_MATCH(esk, net, acookie,
+					      sk->sk_daddr,
+					      sk->sk_rcv_saddr, ports,
+					      dif, sdif))) {
+				if (unlikely(!refcount_inc_not_zero(&esk->sk_refcnt)))
+					goto out;
+				if (unlikely(!INET_MATCH(esk, net, acookie,
+							 sk->sk_daddr,
+							 sk->sk_rcv_saddr,
+							 ports,
+							 dif, sdif))) {
+					sock_gen_put(esk);
+					goto begin;
+				}
+				goto found;
+			}
+		}
+
 	}
-	if (ret)
+	if (ret) {
+out:
+		esk = NULL;
 		__sk_nulls_add_node_rcu(sk, list);
+	}
+found:
 	spin_unlock(lock);
+	if (esk) {
+		*osk = esk;
+		ret = false;
+	}
 	return ret;
 }
 
-bool inet_ehash_nolisten(struct sock *sk, struct sock *osk)
+bool inet_ehash_nolisten(struct sock *sk, struct sock **osk)
 {
 	bool ok = inet_ehash_insert(sk, osk);
 
@@ -578,7 +619,7 @@ static int inet_reuseport_add_sock(struct sock *sk,
 	return reuseport_alloc(sk, inet_rcv_saddr_any(sk));
 }
 
-int __inet_hash(struct sock *sk, struct sock *osk)
+int __inet_hash(struct sock *sk, struct sock **osk)
 {
 	struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
 	struct inet_listen_hashbucket *ilb;
@@ -760,7 +801,7 @@ int __inet_hash_connect(struct inet_timewait_death_row *death_row,
 	inet_bind_hash(sk, tb, port);
 	if (sk_unhashed(sk)) {
 		inet_sk(sk)->inet_sport = htons(port);
-		inet_ehash_nolisten(sk, (struct sock *)tw);
+		inet_ehash_nolisten(sk, (struct sock **)&tw);
 	}
 	if (tw)
 		inet_twsk_bind_unhash(tw, hinfo);
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index e03756631541..c4bb895085f0 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -208,7 +208,7 @@ struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
 
 	child = icsk->icsk_af_ops->syn_recv_sock(sk, skb, req, dst,
 						 NULL, &own_req);
-	if (child) {
+	if (child && own_req) {
 		refcount_set(&req->rsk_refcnt, 1);
 		tcp_sk(child)->tsoffset = tsoff;
 		sock_rps_save_rxhash(child, skb);
@@ -223,6 +223,9 @@ struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
 
 		bh_unlock_sock(child);
 		sock_put(child);
+	}  else if (child && !own_req) {
+		__reqsk_free(req);
+		return child;
 	}
 	__reqsk_free(req);
 
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 592c73962723..902aad146512 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1501,6 +1501,7 @@ struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
 	int l3index;
 #endif
 	struct ip_options_rcu *inet_opt;
+	struct sock *osk;
 
 	if (sk_acceptq_is_full(sk))
 		goto exit_overflow;
@@ -1565,11 +1566,20 @@ struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
 
 	if (__inet_inherit_port(sk, newsk) < 0)
 		goto put_and_exit;
-	*own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
+	osk = req_to_sk(req_unhash);
+	*own_req = inet_ehash_nolisten(newsk, &osk);
 	if (likely(*own_req)) {
 		tcp_move_syn(newtp, req);
 		ireq->ireq_opt = NULL;
 	} else {
+		if (!req_unhash && osk) {
+			/* This code path should only be executed in the
+			 * syncookie case only
+			 */
+			bh_unlock_sock(newsk);
+			sock_put(newsk);
+			newsk = osk;
+		}
 		newinet->inet_opt = NULL;
 	}
 	return newsk;
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 305870a72352..50543ffc927e 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1190,6 +1190,7 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *
 	struct inet_sock *newinet;
 	struct tcp_sock *newtp;
 	struct sock *newsk;
+	struct sock *osk;
 #ifdef CONFIG_TCP_MD5SIG
 	struct tcp_md5sig_key *key;
 	int l3index;
@@ -1206,6 +1207,12 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *
 
 		if (!newsk)
 			return NULL;
+		else if (!own_req) {
+			/* We're returning an existing child socket, probably
+			 * created by a previous syncookie ACK.
+			 */
+			return newsk;
+		}
 
 		inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk);
 
@@ -1359,7 +1366,8 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *
 		tcp_done(newsk);
 		goto out;
 	}
-	*own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
+	osk = req_to_sk(req_unhash);
+	*own_req = inet_ehash_nolisten(newsk, &osk);
 	if (*own_req) {
 		tcp_move_syn(newtp, req);
 
@@ -1374,6 +1382,15 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *
 				skb_set_owner_r(newnp->pktoptions, newsk);
 			}
 		}
+	} else {
+		if (!req_unhash && osk) {
+			/* This code path should only be executed in the
+			 * syncookie case only
+			 */
+			bh_unlock_sock(newsk);
+			sock_put(newsk);
+			newsk = osk;
+		}
 	}
 
 	return newsk;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] tcp: fix race condition when creating child sockets from syncookies
  2020-11-09 16:11 Ricardo Dias
@ 2020-11-09 16:29 ` Eric Dumazet
  0 siblings, 0 replies; 5+ messages in thread
From: Eric Dumazet @ 2020-11-09 16:29 UTC (permalink / raw)
  To: Ricardo Dias
  Cc: David Miller, Jakub Kicinski, Alexey Kuznetsov, Hideaki YOSHIFUJI,
	netdev, LKML

On Mon, Nov 9, 2020 at 5:11 PM Ricardo Dias <rdias@singlestore.com> wrote:
>
> When the TCP stack is in SYN flood mode, the server child socket is
> created from the SYN cookie received in a TCP packet with the ACK flag
> set.
>
> The child socket is created when the server receives the first TCP
> packet with a valid SYN cookie from the client. Usually, this packet
> corresponds to the final step of the TCP 3-way handshake, the ACK
> packet. But is also possible to receive a valid SYN cookie from the
> first TCP data packet sent by the client, and thus create a child socket
> from that SYN cookie.
>
> Since a client socket is ready to send data as soon as it receives the
> SYN+ACK packet from the server, the client can send the ACK packet (sent
> by the TCP stack code), and the first data packet (sent by the userspace
> program) almost at the same time, and thus the server will equally
> receive the two TCP packets with valid SYN cookies almost at the same
> instant.
>
> When such event happens, the TCP stack code has a race condition that
> occurs between the momement a lookup is done to the established
> connections hashtable to check for the existence of a connection for the
> same client, and the moment that the child socket is added to the
> established connections hashtable. As a consequence, this race condition
> can lead to a situation where we add two child sockets to the
> established connections hashtable and deliver two sockets to the
> userspace program to the same client.
>
> This patch fixes the race condition by checking if an existing child
> socket exists for the same client when we are adding the second child
> socket to the established connections socket. If an existing child
> socket exists, we return that socket and use it to process the TCP
> packet received, and discard the second child socket to the same client.
>
> Signed-off-by: Ricardo Dias <rdias@memsql.com>
> Reported-by: kernel test robot <lkp@intel.com>

The kernel test robot reported a bug on your v1, you do not have to
claim the bot found this issue.

> ---
> v2 (2020-11-09):
> * Changed the author's email domain.
> * Removed the helper function inet_ehash_insert_chk_dup and moved the
>   logic to the existing inet_ehash_insert.
> * Updated the callers of iner_ehash_nolisten to deal with the new
>   logic.
>
>
>  include/net/inet_hashtables.h |  6 ++--
>  net/dccp/ipv4.c               |  4 ++-
>  net/dccp/ipv6.c               |  4 ++-
>  net/ipv4/inet_hashtables.c    | 63 +++++++++++++++++++++++++++++------
>  net/ipv4/syncookies.c         |  5 ++-
>  net/ipv4/tcp_ipv4.c           | 12 ++++++-
>  net/ipv6/tcp_ipv6.c           | 19 ++++++++++-
>  7 files changed, 94 insertions(+), 19 deletions(-)
>
> diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h
> index 92560974ea67..dffa345d52a7 100644
> --- a/include/net/inet_hashtables.h
> +++ b/include/net/inet_hashtables.h
> @@ -247,9 +247,9 @@ void inet_hashinfo2_init(struct inet_hashinfo *h, const char *name,
>                          unsigned long high_limit);
>  int inet_hashinfo2_init_mod(struct inet_hashinfo *h);
>
> -bool inet_ehash_insert(struct sock *sk, struct sock *osk);
> -bool inet_ehash_nolisten(struct sock *sk, struct sock *osk);
> -int __inet_hash(struct sock *sk, struct sock *osk);
> +bool inet_ehash_insert(struct sock *sk, struct sock **osk);
> +bool inet_ehash_nolisten(struct sock *sk, struct sock **osk);
> +int __inet_hash(struct sock *sk, struct sock **osk);
>  int inet_hash(struct sock *sk);
>  void inet_unhash(struct sock *sk);
>
> diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
> index 9c28c8251125..99bbba478991 100644
> --- a/net/dccp/ipv4.c
> +++ b/net/dccp/ipv4.c
> @@ -400,6 +400,7 @@ struct sock *dccp_v4_request_recv_sock(const struct sock *sk,
>         struct inet_request_sock *ireq;
>         struct inet_sock *newinet;
>         struct sock *newsk;
> +       struct sock *osk;
>
>         if (sk_acceptq_is_full(sk))
>                 goto exit_overflow;
> @@ -427,7 +428,8 @@ struct sock *dccp_v4_request_recv_sock(const struct sock *sk,
>
>         if (__inet_inherit_port(sk, newsk) < 0)
>                 goto put_and_exit;
> -       *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
> +       osk = req_to_sk(req_unhash);
> +       *own_req = inet_ehash_nolisten(newsk, &osk);
>         if (*own_req)
>                 ireq->ireq_opt = NULL;
>         else
> diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
> index ef4ab28cfde0..91a825c00a97 100644
> --- a/net/dccp/ipv6.c
> +++ b/net/dccp/ipv6.c
> @@ -407,6 +407,7 @@ static struct sock *dccp_v6_request_recv_sock(const struct sock *sk,
>         struct inet_sock *newinet;
>         struct dccp6_sock *newdp6;
>         struct sock *newsk;
> +       struct sock *osk;
>
>         if (skb->protocol == htons(ETH_P_IP)) {
>                 /*
> @@ -533,7 +534,8 @@ static struct sock *dccp_v6_request_recv_sock(const struct sock *sk,
>                 dccp_done(newsk);
>                 goto out;
>         }
> -       *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
> +       osk = req_to_sk(req_unhash);
> +       *own_req = inet_ehash_nolisten(newsk, &osk);
>         /* Clone pktoptions received with SYN, if we own the req */
>         if (*own_req && ireq->pktopts) {
>                 newnp->pktoptions = skb_clone(ireq->pktopts, GFP_ATOMIC);
> diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
> index 239e54474b65..8d62b22b9a95 100644
> --- a/net/ipv4/inet_hashtables.c
> +++ b/net/ipv4/inet_hashtables.c
> @@ -510,17 +510,27 @@ static u32 inet_sk_port_offset(const struct sock *sk)
>                                           inet->inet_dport);
>  }
>
> -/* insert a socket into ehash, and eventually remove another one
> - * (The another one can be a SYN_RECV or TIMEWAIT
> +/* Insert a socket into ehash, and eventually remove another one
> + * (The another one can be a SYN_RECV or TIMEWAIT)
> + * If an existing socket already exists, it returns that socket
> + * through the osk parameter.
>   */
> -bool inet_ehash_insert(struct sock *sk, struct sock *osk)
> +bool inet_ehash_insert(struct sock *sk, struct sock **osk)
>  {
>         struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
>         struct hlist_nulls_head *list;
>         struct inet_ehash_bucket *head;
> -       spinlock_t *lock;
> +       const struct hlist_nulls_node *node;
> +       struct sock *esk;
> +       spinlock_t *lock; /* protects hashinfo socket entry */
> +       struct net *net = sock_net(sk);
> +       const int dif = sk->sk_bound_dev_if;
> +       const int sdif = sk->sk_bound_dev_if;
>         bool ret = true;
>
> +       INET_ADDR_COOKIE(acookie, sk->sk_daddr, sk->sk_rcv_saddr);
> +       const __portpair ports = INET_COMBINED_PORTS(sk->sk_dport, sk->sk_num);
> +

This does not work for IPv6.
This function is used both for IPv4 and IPv6

Please test your changes for IPv6, thank you !

>         WARN_ON_ONCE(!sk_unhashed(sk));
>
>         sk->sk_hash = sk_ehashfn(sk);
> @@ -529,17 +539,48 @@ bool inet_ehash_insert(struct sock *sk, struct sock *osk)
>         lock = inet_ehash_lockp(hashinfo, sk->sk_hash);
>
>         spin_lock(lock);
> -       if (osk) {
> -               WARN_ON_ONCE(sk->sk_hash != osk->sk_hash);
> -               ret = sk_nulls_del_node_init_rcu(osk);
> +       if (osk && *osk) {
> +               WARN_ON_ONCE(sk->sk_hash != (*osk)->sk_hash);
> +               ret = sk_nulls_del_node_init_rcu(*osk);
> +       } else if (osk && !*osk) {
> +begin:
> +               sk_nulls_for_each_rcu(esk, node, list) {
> +                       if (esk->sk_hash != sk->sk_hash)
> +                               continue;
> +                       if (likely(INET_MATCH(esk, net, acookie,
> +                                             sk->sk_daddr,
> +                                             sk->sk_rcv_saddr, ports,
> +                                             dif, sdif))) {
> +                               if (unlikely(!refcount_inc_not_zero(&esk->sk_refcnt)))
> +                                       goto out;
> +                               if (unlikely(!INET_MATCH(esk, net, acookie,
> +                                                        sk->sk_daddr,
> +                                                        sk->sk_rcv_saddr,
> +                                                        ports,
> +                                                        dif, sdif))) {

This can not happen, since you own the spinlock protecting the hash bucket.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] tcp: fix race condition when creating child sockets from syncookies
@ 2020-11-10  6:23 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2020-11-10  6:23 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 6063 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20201109161146.GA629827@rdias-suse-pc.lan>
References: <20201109161146.GA629827@rdias-suse-pc.lan>
TO: Ricardo Dias <rdias@singlestore.com>
TO: davem(a)davemloft.net
TO: kuba(a)kernel.org
TO: kuznet(a)ms2.inr.ac.ru
TO: yoshfuji(a)linux-ipv6.org
TO: edumazet(a)google.com
CC: netdev(a)vger.kernel.org
CC: linux-kernel(a)vger.kernel.org

Hi Ricardo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on net/master linus/master v5.10-rc3 next-20201109]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ricardo-Dias/tcp-fix-race-condition-when-creating-child-sockets-from-syncookies/20201110-001214
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git bff6f1db91e330d7fba56f815cdbc412c75fe163
:::::: branch date: 14 hours ago
:::::: commit date: 14 hours ago
config: powerpc-randconfig-s032-20201109 (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-76-gf680124b-dirty
        # https://github.com/0day-ci/linux/commit/52d4b7238a3e63643168c08c1496e59c41d33091
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Ricardo-Dias/tcp-fix-race-condition-when-creating-child-sockets-from-syncookies/20201110-001214
        git checkout 52d4b7238a3e63643168c08c1496e59c41d33091
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=powerpc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
   net/ipv4/tcp_ipv4.c:2802:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *data @@     got struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control @@
   net/ipv4/tcp_ipv4.c:2802:41: sparse:     expected void const *data
   net/ipv4/tcp_ipv4.c:2802:41: sparse:     got struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2911:45: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *data @@     got struct tcp_congestion_ops const [noderef] __rcu *extern [addressable] [toplevel] tcp_congestion_control @@
   net/ipv4/tcp_ipv4.c:2911:45: sparse:     expected void const *data
   net/ipv4/tcp_ipv4.c:2911:45: sparse:     got struct tcp_congestion_ops const [noderef] __rcu *extern [addressable] [toplevel] tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2915:50: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control @@     got struct tcp_congestion_ops * @@
   net/ipv4/tcp_ipv4.c:2915:50: sparse:     expected struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2915:50: sparse:     got struct tcp_congestion_ops *
   net/ipv4/tcp_ipv4.c: note: in included file (through arch/powerpc/include/asm/mmiowb.h, include/linux/spinlock.h, include/linux/mmzone.h, ...):
>> include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_v4_syn_recv_sock' - unexpected unlock
   include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_add_backlog' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2081:21: sparse: sparse: context imbalance in 'tcp_v4_rcv' - different lock contexts for basic block
   include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'listening_get_next' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2343:9: sparse: sparse: context imbalance in 'established_get_first' - wrong count at exit
   net/ipv4/tcp_ipv4.c:2371:40: sparse: sparse: context imbalance in 'established_get_next' - unexpected unlock
   include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_seq_stop' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2803:41: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2803:41: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2912:45: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2912:45: sparse: sparse: dereference of noderef expression
--
   net/ipv6/tcp_ipv6.c: note: in included file (through arch/powerpc/include/asm/mmiowb.h, include/linux/spinlock.h, include/linux/mmzone.h, ...):
>> include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_v6_syn_recv_sock' - unexpected unlock
   net/ipv6/tcp_ipv6.c:1742:21: sparse: sparse: context imbalance in 'tcp_v6_rcv' - different lock contexts for basic block

vim +/tcp_v4_syn_recv_sock +58 include/asm-generic/mmiowb.h

d1be6a28b13ce6 Will Deacon 2019-02-22  48  
d1be6a28b13ce6 Will Deacon 2019-02-22  49  static inline void mmiowb_spin_unlock(void)
d1be6a28b13ce6 Will Deacon 2019-02-22  50  {
d1be6a28b13ce6 Will Deacon 2019-02-22  51  	struct mmiowb_state *ms = __mmiowb_state();
d1be6a28b13ce6 Will Deacon 2019-02-22  52  
d1be6a28b13ce6 Will Deacon 2019-02-22  53  	if (unlikely(ms->mmiowb_pending)) {
d1be6a28b13ce6 Will Deacon 2019-02-22  54  		ms->mmiowb_pending = 0;
d1be6a28b13ce6 Will Deacon 2019-02-22  55  		mmiowb();
d1be6a28b13ce6 Will Deacon 2019-02-22  56  	}
d1be6a28b13ce6 Will Deacon 2019-02-22  57  
d1be6a28b13ce6 Will Deacon 2019-02-22 @58  	ms->nesting_count--;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 24455 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] tcp: fix race condition when creating child sockets from syncookies
@ 2020-11-10  6:58 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2020-11-10  6:58 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 6092 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20201109161146.GA629827@rdias-suse-pc.lan>
References: <20201109161146.GA629827@rdias-suse-pc.lan>
TO: Ricardo Dias <rdias@singlestore.com>
TO: davem(a)davemloft.net
TO: kuba(a)kernel.org
TO: kuznet(a)ms2.inr.ac.ru
TO: yoshfuji(a)linux-ipv6.org
TO: edumazet(a)google.com
CC: netdev(a)vger.kernel.org
CC: linux-kernel(a)vger.kernel.org

Hi Ricardo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on net/master linus/master sparc-next/master v5.10-rc3 next-20201109]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ricardo-Dias/tcp-fix-race-condition-when-creating-child-sockets-from-syncookies/20201110-001214
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git bff6f1db91e330d7fba56f815cdbc412c75fe163
:::::: branch date: 15 hours ago
:::::: commit date: 15 hours ago
config: powerpc-randconfig-s032-20201109 (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-76-gf680124b-dirty
        # https://github.com/0day-ci/linux/commit/52d4b7238a3e63643168c08c1496e59c41d33091
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Ricardo-Dias/tcp-fix-race-condition-when-creating-child-sockets-from-syncookies/20201110-001214
        git checkout 52d4b7238a3e63643168c08c1496e59c41d33091
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=powerpc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
   net/ipv4/tcp_ipv4.c:2802:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *data @@     got struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control @@
   net/ipv4/tcp_ipv4.c:2802:41: sparse:     expected void const *data
   net/ipv4/tcp_ipv4.c:2802:41: sparse:     got struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2911:45: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *data @@     got struct tcp_congestion_ops const [noderef] __rcu *extern [addressable] [toplevel] tcp_congestion_control @@
   net/ipv4/tcp_ipv4.c:2911:45: sparse:     expected void const *data
   net/ipv4/tcp_ipv4.c:2911:45: sparse:     got struct tcp_congestion_ops const [noderef] __rcu *extern [addressable] [toplevel] tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2915:50: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control @@     got struct tcp_congestion_ops * @@
   net/ipv4/tcp_ipv4.c:2915:50: sparse:     expected struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2915:50: sparse:     got struct tcp_congestion_ops *
   net/ipv4/tcp_ipv4.c: note: in included file (through arch/powerpc/include/asm/mmiowb.h, include/linux/spinlock.h, include/linux/mmzone.h, ...):
>> include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_v4_syn_recv_sock' - unexpected unlock
   include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_add_backlog' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2081:21: sparse: sparse: context imbalance in 'tcp_v4_rcv' - different lock contexts for basic block
   include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'listening_get_next' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2343:9: sparse: sparse: context imbalance in 'established_get_first' - wrong count at exit
   net/ipv4/tcp_ipv4.c:2371:40: sparse: sparse: context imbalance in 'established_get_next' - unexpected unlock
   include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_seq_stop' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2803:41: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2803:41: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2912:45: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2912:45: sparse: sparse: dereference of noderef expression
--
   net/ipv6/tcp_ipv6.c: note: in included file (through arch/powerpc/include/asm/mmiowb.h, include/linux/spinlock.h, include/linux/mmzone.h, ...):
>> include/asm-generic/mmiowb.h:58:9: sparse: sparse: context imbalance in 'tcp_v6_syn_recv_sock' - unexpected unlock
   net/ipv6/tcp_ipv6.c:1742:21: sparse: sparse: context imbalance in 'tcp_v6_rcv' - different lock contexts for basic block

vim +/tcp_v4_syn_recv_sock +58 include/asm-generic/mmiowb.h

d1be6a28b13ce6d Will Deacon 2019-02-22  48  
d1be6a28b13ce6d Will Deacon 2019-02-22  49  static inline void mmiowb_spin_unlock(void)
d1be6a28b13ce6d Will Deacon 2019-02-22  50  {
d1be6a28b13ce6d Will Deacon 2019-02-22  51  	struct mmiowb_state *ms = __mmiowb_state();
d1be6a28b13ce6d Will Deacon 2019-02-22  52  
d1be6a28b13ce6d Will Deacon 2019-02-22  53  	if (unlikely(ms->mmiowb_pending)) {
d1be6a28b13ce6d Will Deacon 2019-02-22  54  		ms->mmiowb_pending = 0;
d1be6a28b13ce6d Will Deacon 2019-02-22  55  		mmiowb();
d1be6a28b13ce6d Will Deacon 2019-02-22  56  	}
d1be6a28b13ce6d Will Deacon 2019-02-22  57  
d1be6a28b13ce6d Will Deacon 2019-02-22 @58  	ms->nesting_count--;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 24455 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] tcp: fix race condition when creating child sockets from syncookies
@ 2020-11-11  6:57 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2020-11-11  6:57 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 7718 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20201109161146.GA629827@rdias-suse-pc.lan>
References: <20201109161146.GA629827@rdias-suse-pc.lan>
TO: Ricardo Dias <rdias@singlestore.com>
TO: davem(a)davemloft.net
TO: kuba(a)kernel.org
TO: kuznet(a)ms2.inr.ac.ru
TO: yoshfuji(a)linux-ipv6.org
TO: edumazet(a)google.com
CC: netdev(a)vger.kernel.org
CC: linux-kernel(a)vger.kernel.org

Hi Ricardo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on net/master linus/master sparc-next/master v5.10-rc3 next-20201110]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ricardo-Dias/tcp-fix-race-condition-when-creating-child-sockets-from-syncookies/20201110-001214
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git bff6f1db91e330d7fba56f815cdbc412c75fe163
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: riscv-randconfig-s031-20201109 (attached as .config)
compiler: riscv32-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-106-gd020cf33-dirty
        # https://github.com/0day-ci/linux/commit/52d4b7238a3e63643168c08c1496e59c41d33091
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Ricardo-Dias/tcp-fix-race-condition-when-creating-child-sockets-from-syncookies/20201110-001214
        git checkout 52d4b7238a3e63643168c08c1496e59c41d33091
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=riscv 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
   net/ipv4/tcp_ipv4.c:2802:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *data @@     got struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control @@
   net/ipv4/tcp_ipv4.c:2802:41: sparse:     expected void const *data
   net/ipv4/tcp_ipv4.c:2802:41: sparse:     got struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2911:45: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *data @@     got struct tcp_congestion_ops const [noderef] __rcu *extern [addressable] [toplevel] tcp_congestion_control @@
   net/ipv4/tcp_ipv4.c:2911:45: sparse:     expected void const *data
   net/ipv4/tcp_ipv4.c:2911:45: sparse:     got struct tcp_congestion_ops const [noderef] __rcu *extern [addressable] [toplevel] tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2915:50: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control @@     got struct tcp_congestion_ops * @@
   net/ipv4/tcp_ipv4.c:2915:50: sparse:     expected struct tcp_congestion_ops const [noderef] __rcu *tcp_congestion_control
   net/ipv4/tcp_ipv4.c:2915:50: sparse:     got struct tcp_congestion_ops *
>> net/ipv4/tcp_ipv4.c:1589:25: sparse: sparse: context imbalance in 'tcp_v4_syn_recv_sock' - unexpected unlock
   net/ipv4/tcp_ipv4.c:1858:17: sparse: sparse: context imbalance in 'tcp_add_backlog' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2081:21: sparse: sparse: context imbalance in 'tcp_v4_rcv' - different lock contexts for basic block
   net/ipv4/tcp_ipv4.c:2276:20: sparse: sparse: context imbalance in 'listening_get_next' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2343:9: sparse: sparse: context imbalance in 'established_get_first' - wrong count at exit
   net/ipv4/tcp_ipv4.c:2371:40: sparse: sparse: context imbalance in 'established_get_next' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2501:36: sparse: sparse: context imbalance in 'tcp_seq_stop' - unexpected unlock
   net/ipv4/tcp_ipv4.c:2803:41: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2803:41: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2912:45: sparse: sparse: dereference of noderef expression
   net/ipv4/tcp_ipv4.c:2912:45: sparse: sparse: dereference of noderef expression
--
>> net/ipv6/tcp_ipv6.c:1399:25: sparse: sparse: context imbalance in 'tcp_v6_syn_recv_sock' - unexpected unlock
   net/ipv6/tcp_ipv6.c:1742:21: sparse: sparse: context imbalance in 'tcp_v6_rcv' - different lock contexts for basic block

vim +/tcp_v4_syn_recv_sock +1589 net/ipv4/tcp_ipv4.c

cfb6eeb4c860592 YOSHIFUJI Hideaki 2006-11-14  1576  
0e734419923bd8e David S. Miller   2011-05-08  1577  	if (__inet_inherit_port(sk, newsk) < 0)
0e734419923bd8e David S. Miller   2011-05-08  1578  		goto put_and_exit;
52d4b7238a3e636 Ricardo Dias      2020-11-09  1579  	osk = req_to_sk(req_unhash);
52d4b7238a3e636 Ricardo Dias      2020-11-09  1580  	*own_req = inet_ehash_nolisten(newsk, &osk);
c92e8c02fe66415 Eric Dumazet      2017-10-20  1581  	if (likely(*own_req)) {
49a496c97d035f2 Eric Dumazet      2015-11-05  1582  		tcp_move_syn(newtp, req);
c92e8c02fe66415 Eric Dumazet      2017-10-20  1583  		ireq->ireq_opt = NULL;
c92e8c02fe66415 Eric Dumazet      2017-10-20  1584  	} else {
52d4b7238a3e636 Ricardo Dias      2020-11-09  1585  		if (!req_unhash && osk) {
52d4b7238a3e636 Ricardo Dias      2020-11-09  1586  			/* This code path should only be executed in the
52d4b7238a3e636 Ricardo Dias      2020-11-09  1587  			 * syncookie case only
52d4b7238a3e636 Ricardo Dias      2020-11-09  1588  			 */
52d4b7238a3e636 Ricardo Dias      2020-11-09 @1589  			bh_unlock_sock(newsk);
52d4b7238a3e636 Ricardo Dias      2020-11-09  1590  			sock_put(newsk);
52d4b7238a3e636 Ricardo Dias      2020-11-09  1591  			newsk = osk;
52d4b7238a3e636 Ricardo Dias      2020-11-09  1592  		}
c92e8c02fe66415 Eric Dumazet      2017-10-20  1593  		newinet->inet_opt = NULL;
c92e8c02fe66415 Eric Dumazet      2017-10-20  1594  	}
^1da177e4c3f415 Linus Torvalds    2005-04-16  1595  	return newsk;
^1da177e4c3f415 Linus Torvalds    2005-04-16  1596  
^1da177e4c3f415 Linus Torvalds    2005-04-16  1597  exit_overflow:
c10d9310edf5aa4 Eric Dumazet      2016-04-29  1598  	NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
093d282321daeb1 Balazs Scheidler  2010-10-21  1599  exit_nonewsk:
093d282321daeb1 Balazs Scheidler  2010-10-21  1600  	dst_release(dst);
^1da177e4c3f415 Linus Torvalds    2005-04-16  1601  exit:
9caad864151e525 Eric Dumazet      2016-04-01  1602  	tcp_listendrop(sk);
^1da177e4c3f415 Linus Torvalds    2005-04-16  1603  	return NULL;
0e734419923bd8e David S. Miller   2011-05-08  1604  put_and_exit:
c92e8c02fe66415 Eric Dumazet      2017-10-20  1605  	newinet->inet_opt = NULL;
e337e24d6624e74 Christoph Paasch  2012-12-14  1606  	inet_csk_prepare_forced_close(newsk);
e337e24d6624e74 Christoph Paasch  2012-12-14  1607  	tcp_done(newsk);
0e734419923bd8e David S. Miller   2011-05-08  1608  	goto exit;
^1da177e4c3f415 Linus Torvalds    2005-04-16  1609  }
4bc2f18ba4f22a9 Eric Dumazet      2010-07-09  1610  EXPORT_SYMBOL(tcp_v4_syn_recv_sock);
^1da177e4c3f415 Linus Torvalds    2005-04-16  1611  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30064 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-11-11  6:57 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-10  6:58 [PATCH v2] tcp: fix race condition when creating child sockets from syncookies kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2020-11-11  6:57 kernel test robot
2020-11-10  6:23 kernel test robot
2020-11-09 16:11 Ricardo Dias
2020-11-09 16:29 ` Eric Dumazet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.