summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--pkg/sentry/fsimpl/fuse/connection_control.go5
-rw-r--r--pkg/sentry/fsimpl/fuse/fusefs.go5
2 files changed, 5 insertions, 5 deletions
diff --git a/pkg/sentry/fsimpl/fuse/connection_control.go b/pkg/sentry/fsimpl/fuse/connection_control.go
index 50cf4a761..bfde78559 100644
--- a/pkg/sentry/fsimpl/fuse/connection_control.go
+++ b/pkg/sentry/fsimpl/fuse/connection_control.go
@@ -189,10 +189,9 @@ func (conn *connection) initProcessReply(out *linux.FUSEInitOut, hasSysAdminCap
// Abort this FUSE connection.
// It tries to acquire conn.fd.mu, conn.lock, conn.bgLock in order.
// All possible requests waiting or blocking will be aborted.
+//
+// Preconditions: conn.fd.mu is locked.
func (conn *connection) Abort(ctx context.Context) {
- conn.fd.mu.Lock()
- defer conn.fd.mu.Unlock()
-
conn.mu.Lock()
conn.asyncMu.Lock()
diff --git a/pkg/sentry/fsimpl/fuse/fusefs.go b/pkg/sentry/fsimpl/fuse/fusefs.go
index 86922a96a..f1ffd2343 100644
--- a/pkg/sentry/fsimpl/fuse/fusefs.go
+++ b/pkg/sentry/fsimpl/fuse/fusefs.go
@@ -225,12 +225,13 @@ func newFUSEFilesystem(ctx context.Context, devMinor uint32, opts *filesystemOpt
// Release implements vfs.FilesystemImpl.Release.
func (fs *filesystem) Release(ctx context.Context) {
+ fs.conn.fd.mu.Lock()
+
fs.umounted = true
fs.conn.Abort(ctx)
-
- fs.conn.fd.mu.Lock()
// Notify all the waiters on this fd.
fs.conn.fd.waitQueue.Notify(waiter.EventIn)
+
fs.conn.fd.mu.Unlock()
fs.Filesystem.VFSFilesystem().VirtualFilesystem().PutAnonBlockDevMinor(fs.devMinor)