From 12a9efa29cd4adb79fc38ce03f7fef25ca655692 Mon Sep 17 00:00:00 2001 From: Ayush Ranjan Date: Wed, 16 Feb 2022 00:40:31 -0800 Subject: [PATCH] Do not attempt to clear release dentries if fs.root is nil. When initializing the fs.client and fs.root fails, the filesystem is released. The release implementation panics when leak checking is enabled (in tests) because it lacks nil-checks for fs.root. PiperOrigin-RevId: 428976387 --- pkg/sentry/fsimpl/gofer/gofer.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/sentry/fsimpl/gofer/gofer.go b/pkg/sentry/fsimpl/gofer/gofer.go index a758f49ab..22d356e72 100644 --- a/pkg/sentry/fsimpl/gofer/gofer.go +++ b/pkg/sentry/fsimpl/gofer/gofer.go @@ -697,8 +697,9 @@ func (fs *filesystem) Release(ctx context.Context) { // If leak checking is enabled, release all outstanding references in the // filesystem. We deliberately avoid doing this outside of leak checking; we // have released all external resources above rather than relying on dentry - // destructors. - if refs_vfs1.GetLeakMode() != refs_vfs1.NoLeakChecking { + // destructors. fs.root may be nil if creating the client or initializing the + // root dentry failed in GetFilesystem. + if refs_vfs1.GetLeakMode() != refs_vfs1.NoLeakChecking && fs.root != nil { fs.renameMu.Lock() fs.root.releaseSyntheticRecursiveLocked(ctx) fs.evictAllCachedDentriesLocked(ctx)