diff options
author | Bhasker Hariharan <bhaskerh@google.com> | 2021-03-03 12:18:04 -0800 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-03-03 12:24:21 -0800 |
commit | 3e69f5d088d121f1d3c4bf44ca637a48f13c4819 (patch) | |
tree | 153fa7d51f509c8a5cf066a7aea90fd334a08899 /pkg/sentry/fs | |
parent | 80bc67c268dba0126cd258075c06d744399e0f02 (diff) |
Add checklocks analyzer.
This validates that struct fields if annotated with "// checklocks:mu" where
"mu" is a mutex field in the same struct then access to the field is only
done with "mu" locked.
All types that are guarded by a mutex must be annotated with
// +checklocks:<mutex field name>
For more details please refer to README.md.
PiperOrigin-RevId: 360729328
Diffstat (limited to 'pkg/sentry/fs')
-rw-r--r-- | pkg/sentry/fs/copy_up.go | 11 | ||||
-rw-r--r-- | pkg/sentry/fs/gofer/inode_state.go | 1 |
2 files changed, 7 insertions, 5 deletions
diff --git a/pkg/sentry/fs/copy_up.go b/pkg/sentry/fs/copy_up.go index 8e0aa9019..58deb25fc 100644 --- a/pkg/sentry/fs/copy_up.go +++ b/pkg/sentry/fs/copy_up.go @@ -303,17 +303,18 @@ func copyUpLocked(ctx context.Context, parent *Dirent, next *Dirent) error { // Take a reference on the upper Inode (transferred to // next.Inode.overlay.upper) and make new translations use it. - next.Inode.overlay.dataMu.Lock() + overlay := next.Inode.overlay + overlay.dataMu.Lock() childUpperInode.IncRef() - next.Inode.overlay.upper = childUpperInode - next.Inode.overlay.dataMu.Unlock() + overlay.upper = childUpperInode + overlay.dataMu.Unlock() // Invalidate existing translations through the lower Inode. - next.Inode.overlay.mappings.InvalidateAll(memmap.InvalidateOpts{}) + overlay.mappings.InvalidateAll(memmap.InvalidateOpts{}) // Remove existing memory mappings from the lower Inode. if lowerMappable != nil { - for seg := next.Inode.overlay.mappings.FirstSegment(); seg.Ok(); seg = seg.NextSegment() { + for seg := overlay.mappings.FirstSegment(); seg.Ok(); seg = seg.NextSegment() { for m := range seg.Value() { lowerMappable.RemoveMapping(ctx, m.MappingSpace, m.AddrRange, seg.Start(), m.Writable) } diff --git a/pkg/sentry/fs/gofer/inode_state.go b/pkg/sentry/fs/gofer/inode_state.go index 141e3c27f..e2af1d2ae 100644 --- a/pkg/sentry/fs/gofer/inode_state.go +++ b/pkg/sentry/fs/gofer/inode_state.go @@ -109,6 +109,7 @@ func (i *inodeFileState) loadLoading(_ struct{}) { } // afterLoad is invoked by stateify. +// +checklocks:i.loading func (i *inodeFileState) afterLoad() { load := func() (err error) { // See comment on i.loading(). |