summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2018-06-25 16:45:31 -0700
committerShentubot <shentubot@google.com>2018-06-25 16:46:29 -0700
commit4ac79312b093f2831079d0d71846747a4996d9ad (patch)
tree5452cdc0c073d26c96e0dbb872b0c3543c792848
parent1a9917d14d66250fdc9a3781ef65df4413340a2f (diff)
Don't read cwd or root without holding mu
PiperOrigin-RevId: 202043090 Change-Id: I3c47fb3413ca8615d50d8a0503d72fcce9b09421
-rw-r--r--pkg/sentry/kernel/fs_context.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/pkg/sentry/kernel/fs_context.go b/pkg/sentry/kernel/fs_context.go
index 9aa6fa951..d1ca9c09d 100644
--- a/pkg/sentry/kernel/fs_context.go
+++ b/pkg/sentry/kernel/fs_context.go
@@ -114,11 +114,14 @@ func (f *FSContext) SetWorkingDirectory(d *fs.Dirent) {
if d == nil {
panic("FSContext.SetWorkingDirectory called with nil dirent")
}
+
+ f.mu.Lock()
+ defer f.mu.Unlock()
+
if f.cwd == nil {
panic(fmt.Sprintf("FSContext.SetWorkingDirectory(%v)) called after destroy", d))
}
- f.mu.Lock()
- defer f.mu.Unlock()
+
old := f.cwd
f.cwd = d
d.IncRef()
@@ -144,11 +147,14 @@ func (f *FSContext) SetRootDirectory(d *fs.Dirent) {
if d == nil {
panic("FSContext.SetRootDirectory called with nil dirent")
}
+
+ f.mu.Lock()
+ defer f.mu.Unlock()
+
if f.root == nil {
panic(fmt.Sprintf("FSContext.SetRootDirectory(%v)) called after destroy", d))
}
- f.mu.Lock()
- defer f.mu.Unlock()
+
old := f.root
f.root = d
d.IncRef()