diff options
author | Bhasker Hariharan <bhaskerh@google.com> | 2020-06-05 13:41:19 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-06-05 13:43:01 -0700 |
commit | 526df4f52a07a02687dd43ceb752621a41883f95 (patch) | |
tree | 0dfa217caec7860f52ba1097b4db18c93a2ba421 /pkg/tcpip | |
parent | 45bf7492ef40d01faaf86787162243310175348a (diff) |
Fix error code returned due to Port exhaustion.
For TCP sockets gVisor incorrectly returns EAGAIN when no ephemeral ports are
available to bind during a connect. Linux returns EADDRNOTAVAIL. This change
fixes gVisor to return the correct code and adds a test for the same.
This change also fixes a minor bug for ping sockets where connect() would fail
with EINVAL unless the socket was bound first.
Also added tests for testing UDP Port exhaustion and Ping socket port
exhaustion.
PiperOrigin-RevId: 314988525
Diffstat (limited to 'pkg/tcpip')
-rw-r--r-- | pkg/tcpip/transport/icmp/endpoint.go | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/pkg/tcpip/transport/icmp/endpoint.go b/pkg/tcpip/transport/icmp/endpoint.go index 3bc72bc19..57e0a069b 100644 --- a/pkg/tcpip/transport/icmp/endpoint.go +++ b/pkg/tcpip/transport/icmp/endpoint.go @@ -506,6 +506,7 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error { nicID := addr.NIC localPort := uint16(0) switch e.state { + case stateInitial: case stateBound, stateConnected: localPort = e.ID.LocalPort if e.BindNICID == 0 { |