From df4e144e895afff6eccbe6c08fb551b1f8460076 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Mon, 28 Oct 2024 13:25:09 +0000 Subject: [PATCH] Prevent overflow. --- vfs/memdb/memdb.go | 22 +++++++++------------- vfs/shm.go | 6 +++--- vfs/shm_bsd.go | 2 +- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/vfs/memdb/memdb.go b/vfs/memdb/memdb.go index d313b45..686f8e9 100644 --- a/vfs/memdb/memdb.go +++ b/vfs/memdb/memdb.go @@ -78,19 +78,15 @@ type memDB struct { // +checklocks:dataMtx data []*[sectorSize]byte - // +checklocks:dataMtx size int64 - // +checklocks:lockMtx - shared int32 - // +checklocks:lockMtx - reserved bool - // +checklocks:lockMtx - pending bool - // +checklocks:memoryMtx - refs int + refs int32 + + shared int32 // +checklocks:lockMtx + pending bool // +checklocks:lockMtx + reserved bool // +checklocks:lockMtx lockMtx sync.Mutex dataMtx sync.RWMutex @@ -253,12 +249,12 @@ func (m *memFile) Unlock(lock vfs.LockLevel) error { m.lockMtx.Lock() defer m.lockMtx.Unlock() - if m.pending && m.lock >= vfs.LOCK_PENDING { - m.pending = false - } - if m.reserved && m.lock >= vfs.LOCK_RESERVED { + if m.lock >= vfs.LOCK_RESERVED { m.reserved = false } + if m.lock >= vfs.LOCK_PENDING { + m.pending = false + } if lock < vfs.LOCK_SHARED { m.shared-- } diff --git a/vfs/shm.go b/vfs/shm.go index 402676a..4157468 100644 --- a/vfs/shm.go +++ b/vfs/shm.go @@ -55,7 +55,7 @@ type vfsShm struct { regions []*util.MappedRegion readOnly bool blocking bool - sync.Mutex + barrier sync.Mutex } func (s *vfsShm) shmOpen() _ErrorCode { @@ -202,9 +202,9 @@ func (s *vfsShm) shmUnmap(delete bool) { } func (s *vfsShm) shmBarrier() { - s.Lock() + s.barrier.Lock() //lint:ignore SA2001 memory barrier. - s.Unlock() + s.barrier.Unlock() } func (s *vfsShm) shmEnableBlocking(block bool) { diff --git a/vfs/shm_bsd.go b/vfs/shm_bsd.go index 8dc6ec9..9d4fcd3 100644 --- a/vfs/shm_bsd.go +++ b/vfs/shm_bsd.go @@ -224,7 +224,7 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode { if s.lock[i] { panic(util.AssertErr()) } - if s.vfsShmFile.lock[i] < 0 { + if s.vfsShmFile.lock[i]+1 <= 0 { return _BUSY } }