diff options
author | Adin Scannell <ascannell@google.com> | 2019-06-11 19:23:27 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2019-06-11 19:24:35 -0700 |
commit | df110ad4fe571721a7eb4a5a1f9ce92584ef7809 (patch) | |
tree | 199b836527013e8be7dde32076d859b61d129069 /pkg | |
parent | 69c8657a66ac1a7e3bfd388de0a7cd28ac4b51cd (diff) |
Eat sendfile partial error
For sendfile(2), we propagate a TCP error through the system call layer.
This should be eaten if there is a partial result. This change also adds
a test to ensure that there is no panic in this case, for both TCP sockets
and unix domain sockets.
PiperOrigin-RevId: 252746192
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/sentry/syscalls/linux/error.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/pkg/sentry/syscalls/linux/error.go b/pkg/sentry/syscalls/linux/error.go index 1ba3695fb..72146ea63 100644 --- a/pkg/sentry/syscalls/linux/error.go +++ b/pkg/sentry/syscalls/linux/error.go @@ -92,6 +92,10 @@ func handleIOError(t *kernel.Task, partialResult bool, err, intr error, op strin // TODO(gvisor.dev/issue/161): In some cases SIGPIPE should // also be sent to the application. return nil + case syserror.ECONNRESET: + // For TCP sendfile connections, we may have a reset. But we + // should just return n as the result. + return nil case syserror.ErrWouldBlock: // Syscall would block, but completed a partial read/write. // This case should only be returned by IssueIO for nonblocking |