OSDN Git Service
(root)
/
tomoyo
/
tomoyo-test1.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
b98b330
)
Revert "tcp: Reset tcp connections in SYN-SENT state"
author
Eric Dumazet
<edumazet@google.com>
Fri, 9 Apr 2021 17:02:37 +0000
(10:02 -0700)
committer
Jakub Kicinski
<kuba@kernel.org>
Fri, 9 Apr 2021 23:35:31 +0000
(16:35 -0700)
This reverts commit
e880f8b3a24a73704731a7227ed5fee14bd90192
.
1) Patch has not been properly tested, and is wrong [1]
2) Patch submission did not include TCP maintainer (this is me)
[1]
divide error: 0000 [#1] PREEMPT SMP KASAN
CPU: 0 PID: 8426 Comm: syz-executor478 Not tainted 5.12.0-rc4-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:__tcp_select_window+0x56d/0xad0 net/ipv4/tcp_output.c:3015
Code: 44 89 ff e8 d5 cd f0 f9 45 39 e7 0f 8d 20 ff ff ff e8 f7 c7 f0 f9 44 89 e3 e9 13 ff ff ff e8 ea c7 f0 f9 44 89 e0 44 89 e3 99 <f7> 7c 24 04 29 d3 e9 fc fe ff ff e8 d3 c7 f0 f9 41 f7 dc bf 1f 00
RSP: 0018:
ffffc9000184fac0
EFLAGS:
00010293
RAX:
0000000000000000
RBX:
0000000000000000
RCX:
0000000000000000
RDX:
0000000000000000
RSI:
ffffffff87832e76
RDI:
0000000000000003
RBP:
0000000000000000
R08:
0000000000000000
R09:
0000000000000000
R10:
ffffffff87832e14
R11:
0000000000000000
R12:
0000000000000000
R13:
1ffff92000309f5c
R14:
0000000000000000
R15:
0000000000000000
FS:
00000000023eb300
(0000) GS:
ffff8880b9c00000
(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
CR2:
00007fc2b5f426c0
CR3:
000000001c5cf000
CR4:
00000000001506f0
DR0:
0000000000000000
DR1:
0000000000000000
DR2:
0000000000000000
DR3:
0000000000000000
DR6:
00000000fffe0ff0
DR7:
0000000000000400
Call Trace:
tcp_select_window net/ipv4/tcp_output.c:264 [inline]
__tcp_transmit_skb+0xa82/0x38f0 net/ipv4/tcp_output.c:1351
tcp_transmit_skb net/ipv4/tcp_output.c:1423 [inline]
tcp_send_active_reset+0x475/0x8e0 net/ipv4/tcp_output.c:3449
tcp_disconnect+0x15a9/0x1e60 net/ipv4/tcp.c:2955
inet_shutdown+0x260/0x430 net/ipv4/af_inet.c:905
__sys_shutdown_sock net/socket.c:2189 [inline]
__sys_shutdown_sock net/socket.c:2183 [inline]
__sys_shutdown+0xf1/0x1b0 net/socket.c:2201
__do_sys_shutdown net/socket.c:2209 [inline]
__se_sys_shutdown net/socket.c:2207 [inline]
__x64_sys_shutdown+0x50/0x70 net/socket.c:2207
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xae
Fixes:
e880f8b3a24a
("tcp: Reset tcp connections in SYN-SENT state")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Manoj Basapathi <manojbm@codeaurora.org>
Cc: Sauvik Saha <ssaha@codeaurora.org>
Link:
https://lore.kernel.org/r/20210409170237.274904-1-eric.dumazet@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/tcp.c
patch
|
blob
|
history
diff --git
a/net/ipv4/tcp.c
b/net/ipv4/tcp.c
index
627a472
..
e14fd0c
100644
(file)
--- a/
net/ipv4/tcp.c
+++ b/
net/ipv4/tcp.c
@@
-2888,7
+2888,7
@@
static inline bool tcp_need_reset(int state)
{
return (1 << state) &
(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT | TCPF_FIN_WAIT1 |
- TCPF_FIN_WAIT2 | TCPF_SYN_RECV
| TCPF_SYN_SENT
);
+ TCPF_FIN_WAIT2 | TCPF_SYN_RECV);
}
static void tcp_rtx_queue_purge(struct sock *sk)
@@
-2954,7
+2954,8
@@
int tcp_disconnect(struct sock *sk, int flags)
*/
tcp_send_active_reset(sk, gfp_any());
sk->sk_err = ECONNRESET;
- }
+ } else if (old_state == TCP_SYN_SENT)
+ sk->sk_err = ECONNRESET;
tcp_clear_xmit_timers(sk);
__skb_queue_purge(&sk->sk_receive_queue);