OpenAFS Master Repository branch, master, updated. openafs-devel-1_9_0-56-gde3e728
Gerrit Code Review
gerrit@openafs.org
Fri, 13 Nov 2020 10:57:43 -0500
The following commit has been merged in the master branch:
commit de3e7289e227db057cb4eca431e47d5c5502da53
Author: Mark Vitale <mvitale@sinenomine.net>
Date: Thu Nov 5 18:16:51 2020 -0500
vos: avoid double release of a volume lock
To update a volume entry in the VLDB, vos commands typically lock the
volume entry via VL_SetLock, then call VL_UpdateEntryN, then release the
lock via VL_ReleaseLock. However, some vos commands exploit the
optional lock release flags of VL_UpdateEntryN to combine the update and
unlock operations into a single RPC. This approach requires extra care
to ensure that VL_ReleaseLock is issued for a failed VL_UpdateEntryN,
but NOT for a successful VL_UpdateEntryN.
Unfortunately, the following commands have success paths that fall
through to the error path, resulting in a double release of the volume
lock:
- vos convertROtoRW
- vos release
A second VL_ReleaseLock of a volume entry that has already been unlocked
via VL_UpdateEntryN is essentially a harmless no-op (other than negating
any benefit of exploiting the VL_UpdateEntryN lock flags). However, if
there is a race with another volume operation on the same volume, it is
possible for this bug to release the volume lock of a different volume
operation.
This problem has been present in 'vos release' since OpenAFS 1.0. This
problem has been present in 'vos convertROtoRW' since the command's
introduction in commit 8af8241e94284522feb77d75aee8ea3deb73f3cc
vol-ro-to-rw-tool-20030314.
Properly maintain state to avoid unlocking a volume (with
VL_ReleaseLock) that has already been unlocked (via VL_UpdateEntryN).
Thanks to Andrew Deason for discovering the issue and suggesting the
fix.
Change-Id: I757b4619b9431d1ca980f755349806993add14a5
Reviewed-on: https://gerrit.openafs.org/14426
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/volser/vsprocs.c | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
--
OpenAFS Master Repository