aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/file.c
diff options
context:
space:
mode:
authorASANO Masahiro <masano@tnes.nec.co.jp>2005-12-21 23:24:54 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-12-22 12:24:05 -0500
commit0800c5f7a499a8961c3868e95cc4cf1715166457 (patch)
tree609cb9c9cb8e3219722df13907527d3410ae861b /fs/nfs/file.c
parentd6f029130fb83b36fb709a187275b0494035d689 (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.c3
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))