| From foo@baz Sat Apr 16 10:02:53 PDT 2016 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Wed, 16 Mar 2016 22:52:15 -0700 |
| Subject: tcp/dccp: remove obsolete WARN_ON() in icmp handlers |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit e316ea62e3203d524ff0239a40c56d3a39ad1b5c ] |
| |
| Now SYN_RECV request sockets are installed in ehash table, an ICMP |
| handler can find a request socket while another cpu handles an incoming |
| packet transforming this SYN_RECV request socket into an ESTABLISHED |
| socket. |
| |
| We need to remove the now obsolete WARN_ON(req->sk), since req->sk |
| is set when a new child is created and added into listener accept queue. |
| |
| If this race happens, the ICMP will do nothing special. |
| |
| Fixes: 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table") |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Reported-by: Ben Lazarus <blazarus@google.com> |
| Reported-by: Neal Cardwell <ncardwell@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/dccp/ipv4.c | 2 -- |
| net/ipv4/tcp_ipv4.c | 2 -- |
| 2 files changed, 4 deletions(-) |
| |
| --- a/net/dccp/ipv4.c |
| +++ b/net/dccp/ipv4.c |
| @@ -204,8 +204,6 @@ void dccp_req_err(struct sock *sk, u64 s |
| * ICMPs are not backlogged, hence we cannot get an established |
| * socket here. |
| */ |
| - WARN_ON(req->sk); |
| - |
| if (!between48(seq, dccp_rsk(req)->dreq_iss, dccp_rsk(req)->dreq_gss)) { |
| NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS); |
| } else { |
| --- a/net/ipv4/tcp_ipv4.c |
| +++ b/net/ipv4/tcp_ipv4.c |
| @@ -320,8 +320,6 @@ void tcp_req_err(struct sock *sk, u32 se |
| /* ICMPs are not backlogged, hence we cannot get |
| * an established socket here. |
| */ |
| - WARN_ON(req->sk); |
| - |
| if (seq != tcp_rsk(req)->snt_isn) { |
| NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS); |
| } else if (abort) { |