diff options
author | ASANO Masahiro <masano@tnes.nec.co.jp> | 2005-12-21 23:24:54 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-12-22 12:24:05 -0500 |
commit | 0800c5f7a499a8961c3868e95cc4cf1715166457 (patch) | |
tree | 609cb9c9cb8e3219722df13907527d3410ae861b /fs/nfs/file.c | |
parent | d6f029130fb83b36fb709a187275b0494035d689 (diff) |
[PATCH] fix posix lock on NFS
NFS client prevents mandatory lock, but there is a flaw on it; Locks are
possibly left if the mode is changed while locking.
This permits unlocking even if the mandatory lock bits are set.
Signed-off-by: ASANO Masahiro <masano@tnes.nec.co.jp>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/nfs/file.c')
-rw-r--r-- | fs/nfs/file.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index eb5cd4c3bbfd..7a79fbe9f539 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -509,7 +509,8 @@ static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl) | |||
509 | return -EINVAL; | 509 | return -EINVAL; |
510 | 510 | ||
511 | /* No mandatory locks over NFS */ | 511 | /* No mandatory locks over NFS */ |
512 | if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) | 512 | if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID && |
513 | fl->fl_type != F_UNLCK) | ||
513 | return -ENOLCK; | 514 | return -ENOLCK; |
514 | 515 | ||
515 | if (IS_GETLK(cmd)) | 516 | if (IS_GETLK(cmd)) |