summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/kernel/pipe
diff options
context:
space:
mode:
authorIan Lewis <ianlewis@google.com>2021-05-20 23:42:10 -0700
committergVisor bot <gvisor-bot@google.com>2021-05-20 23:44:41 -0700
commit2bed0bb09661bcd72d2d3470329e88eb7b6966a0 (patch)
treeae20a541a9a8a2c2732f8654109a2fe76a514337 /pkg/sentry/kernel/pipe
parent5bbc22797147bb83f9698b337522059099153fd7 (diff)
Send SIGPIPE for closed pipes.
Fixes #5974 Updates #161 PiperOrigin-RevId: 375024740
Diffstat (limited to 'pkg/sentry/kernel/pipe')
-rw-r--r--pkg/sentry/kernel/pipe/pipe_util.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/pkg/sentry/kernel/pipe/pipe_util.go b/pkg/sentry/kernel/pipe/pipe_util.go
index 2d89b9ccd..24e467e93 100644
--- a/pkg/sentry/kernel/pipe/pipe_util.go
+++ b/pkg/sentry/kernel/pipe/pipe_util.go
@@ -86,6 +86,12 @@ func (p *Pipe) Write(ctx context.Context, src usermem.IOSequence) (int64, error)
if n > 0 {
p.Notify(waiter.ReadableEvents)
}
+ if err == unix.EPIPE {
+ // If we are returning EPIPE send SIGPIPE to the task.
+ if sendSig := linux.SignalNoInfoFuncFromContext(ctx); sendSig != nil {
+ sendSig(linux.SIGPIPE)
+ }
+ }
return n, err
}