summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/vfs/lock.go
diff options
context:
space:
mode:
authorDean Deng <deandeng@google.com>2020-08-19 08:50:59 -0700
committergVisor bot <gvisor-bot@google.com>2020-08-19 08:53:12 -0700
commit33c60b893fe8a0f039c781091bf96cbcd47ecc2d (patch)
treeac2dec1877b69a47880e0c6316cca1069258c94f /pkg/sentry/vfs/lock.go
parent35dc7fe7e78faab35b55eaa6f82360cc8b23f3b3 (diff)
Return appropriate errors when file locking is unsuccessful.
test_eintr now passes in the Python runtime tests. Updates #3515. PiperOrigin-RevId: 327441081
Diffstat (limited to 'pkg/sentry/vfs/lock.go')
-rw-r--r--pkg/sentry/vfs/lock.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/pkg/sentry/vfs/lock.go b/pkg/sentry/vfs/lock.go
index 6c7583a81..42666eebf 100644
--- a/pkg/sentry/vfs/lock.go
+++ b/pkg/sentry/vfs/lock.go
@@ -46,7 +46,13 @@ func (fl *FileLocks) LockBSD(uid fslock.UniqueID, t fslock.LockType, block fsloc
if fl.bsd.LockRegion(uid, t, fslock.LockRange{0, fslock.LockEOF}, block) {
return nil
}
- return syserror.ErrWouldBlock
+
+ // Return an appropriate error for the unsuccessful lock attempt, depending on
+ // whether this is a blocking or non-blocking operation.
+ if block == nil {
+ return syserror.ErrWouldBlock
+ }
+ return syserror.ERESTARTSYS
}
// UnlockBSD releases a BSD-style lock on the entire file.
@@ -66,7 +72,13 @@ func (fl *FileLocks) LockPOSIX(ctx context.Context, fd *FileDescription, uid fsl
if fl.posix.LockRegion(uid, t, rng, block) {
return nil
}
- return syserror.ErrWouldBlock
+
+ // Return an appropriate error for the unsuccessful lock attempt, depending on
+ // whether this is a blocking or non-blocking operation.
+ if block == nil {
+ return syserror.ErrWouldBlock
+ }
+ return syserror.ERESTARTSYS
}
// UnlockPOSIX releases a POSIX-style lock on a file region.