summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/transport/tcp/endpoint.go
diff options
context:
space:
mode:
authorAndrei Vagin <avagin@google.com>2021-03-01 12:14:47 -0800
committergVisor bot <gvisor-bot@google.com>2021-03-01 12:17:20 -0800
commit865ca64ee8c0af9eba88a4a04e0730630fae6d8b (patch)
tree7afe19c2821490397e0a7fd4bad4c8e67964c6dc /pkg/tcpip/transport/tcp/endpoint.go
parent037bb2f45abada02fb50b563f3d37381f88de7f5 (diff)
tcp: endpoint.Write has to send all data that has been read from payload
io.Reader.ReadFull returns the number of bytes copied and an error if fewer bytes were read. PiperOrigin-RevId: 360247614
Diffstat (limited to 'pkg/tcpip/transport/tcp/endpoint.go')
-rw-r--r--pkg/tcpip/transport/tcp/endpoint.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/pkg/tcpip/transport/tcp/endpoint.go b/pkg/tcpip/transport/tcp/endpoint.go
index 83ec99fa9..f47b39ccc 100644
--- a/pkg/tcpip/transport/tcp/endpoint.go
+++ b/pkg/tcpip/transport/tcp/endpoint.go
@@ -1552,10 +1552,11 @@ func (e *endpoint) Write(p tcpip.Payloader, opts tcpip.WriteOptions) (int64, tcp
return nil, nil
}
v := make([]byte, avail)
- if _, err := io.ReadFull(p, v); err != nil {
+ n, err := p.Read(v)
+ if err != nil && err != io.EOF {
return nil, &tcpip.ErrBadBuffer{}
}
- return v, nil
+ return v[:n], nil
}()
if len(v) == 0 || err != nil {
return nil, 0, err