diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-09-29 11:51:10 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-09-29 11:51:10 -0700 |
commit | 7d64bc1fdf538869de5964475110a69580b481ad (patch) | |
tree | f200e78e078c95a3ddabb812de5da3bb80bf1f3a /pkg/sentry/socket/unix/unix_vfs2.go | |
parent | f15182243e508b0754d59350a886397e2a0ba0b2 (diff) | |
parent | 71f8cab91b2005c9e3ab904e3a2cba99cb031230 (diff) |
Merge pull request #3875 from btw616:fix/issue-3874
PiperOrigin-RevId: 334428344
Diffstat (limited to 'pkg/sentry/socket/unix/unix_vfs2.go')
-rw-r--r-- | pkg/sentry/socket/unix/unix_vfs2.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/pkg/sentry/socket/unix/unix_vfs2.go b/pkg/sentry/socket/unix/unix_vfs2.go index 8b1abd922..3345124cc 100644 --- a/pkg/sentry/socket/unix/unix_vfs2.go +++ b/pkg/sentry/socket/unix/unix_vfs2.go @@ -45,6 +45,7 @@ type SocketVFS2 struct { vfs.DentryMetadataFileDescriptionImpl vfs.LockFD + socketVFS2Refs socketOpsCommon } @@ -91,6 +92,25 @@ func NewFileDescription(ep transport.Endpoint, stype linux.SockType, flags uint3 return vfsfd, nil } +// DecRef implements RefCounter.DecRef. +func (s *SocketVFS2) DecRef(ctx context.Context) { + s.socketVFS2Refs.DecRef(func() { + t := kernel.TaskFromContext(ctx) + t.Kernel().DeleteSocketVFS2(&s.vfsfd) + s.ep.Close(ctx) + if s.abstractNamespace != nil { + s.abstractNamespace.Remove(s.abstractName, s) + } + }) +} + +// Release implements vfs.FileDescriptionImpl.Release. +func (s *SocketVFS2) Release(ctx context.Context) { + // Release only decrements a reference on s because s may be referenced in + // the abstract socket namespace. + s.DecRef(ctx) +} + // GetSockOpt implements the linux syscall getsockopt(2) for sockets backed by // a transport.Endpoint. func (s *SocketVFS2) GetSockOpt(t *kernel.Task, level, name int, outPtr usermem.Addr, outLen int) (marshal.Marshallable, *syserr.Error) { |