diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-12-17 18:22:43 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-12-17 18:22:43 +0000 |
commit | 2b80820b5032808875dbd5255479380c818baf79 (patch) | |
tree | a9fa747e14a9576a48f03fc4042f9b69133aa7ba /pkg/tcpip/transport/tcp | |
parent | 2bdfe99b6b1337d1a3b696ed8b2ad7f6b24c8896 (diff) | |
parent | 3f4d8fefb45d75937292302e4c158f76da5c7ca8 (diff) |
Merge release-20191210.0-37-g3f4d8fe (automated)
Diffstat (limited to 'pkg/tcpip/transport/tcp')
-rw-r--r-- | pkg/tcpip/transport/tcp/connect.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/pkg/tcpip/transport/tcp/connect.go b/pkg/tcpip/transport/tcp/connect.go index 4c34fc9d2..cdd69f360 100644 --- a/pkg/tcpip/transport/tcp/connect.go +++ b/pkg/tcpip/transport/tcp/connect.go @@ -218,6 +218,14 @@ func (h *handshake) synSentState(s *segment) *tcpip.Error { // acceptable if the ack field acknowledges the SYN. if s.flagIsSet(header.TCPFlagRst) { if s.flagIsSet(header.TCPFlagAck) && s.ackNumber == h.iss+1 { + // RFC 793, page 67, states that "If the RST bit is set [and] If the ACK + // was acceptable then signal the user "error: connection reset", drop + // the segment, enter CLOSED state, delete TCB, and return." + h.ep.mu.Lock() + h.ep.workerCleanup = true + h.ep.mu.Unlock() + // Although the RFC above calls out ECONNRESET, Linux actually returns + // ECONNREFUSED here so we do as well. return tcpip.ErrConnectionRefused } return nil |