From 577c82f22c6c175240fa52fee560f39aaa7db3a7 Mon Sep 17 00:00:00 2001 From: Dean Deng Date: Tue, 13 Oct 2020 01:11:00 -0700 Subject: [vfs2] Add FilesystemType.Release to avoid reference leaks. Singleton filesystem like devpts and devtmpfs have a single filesystem shared among all mounts, so they acquire a "self-reference" when initialized that must be released when the entire virtual filesystem is released at sandbox exit. PiperOrigin-RevId: 336828852 --- pkg/sentry/fsimpl/devtmpfs/devtmpfs.go | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'pkg/sentry/fsimpl/devtmpfs') diff --git a/pkg/sentry/fsimpl/devtmpfs/devtmpfs.go b/pkg/sentry/fsimpl/devtmpfs/devtmpfs.go index 6d1753080..ed729e480 100644 --- a/pkg/sentry/fsimpl/devtmpfs/devtmpfs.go +++ b/pkg/sentry/fsimpl/devtmpfs/devtmpfs.go @@ -71,6 +71,15 @@ func (fst *FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virtua return fst.fs, fst.root, nil } +// Release implements vfs.FilesystemType.Release. +func (fst *FilesystemType) Release(ctx context.Context) { + if fst.fs != nil { + // Release the original reference obtained when creating the filesystem. + fst.root.DecRef(ctx) + fst.fs.DecRef(ctx) + } +} + // Accessor allows devices to create device special files in devtmpfs. type Accessor struct { vfsObj *vfs.VirtualFilesystem -- cgit v1.2.3