diff options
author | Andrei Vagin <avagin@google.com> | 2021-03-01 12:14:47 -0800 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-03-01 12:17:20 -0800 |
commit | 865ca64ee8c0af9eba88a4a04e0730630fae6d8b (patch) | |
tree | 7afe19c2821490397e0a7fd4bad4c8e67964c6dc /pkg/tcpip/transport/tcp/endpoint.go | |
parent | 037bb2f45abada02fb50b563f3d37381f88de7f5 (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.go | 5 |
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 |