diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-05-20 19:34:39 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-07-09 12:08:40 -0400 |
commit | 2116271a347d1181b5497602c2bfada1de8fd53b (patch) | |
tree | 537498aa91bbe1fbbfc7f2c1e00910ca7fbc2261 /include | |
parent | f3d47a3a6a1484a93c8cfe1e8c8d4399c95199c7 (diff) |
NFS: Add correct bounds checking to NFSv2 locks
NFSv2 file locking currently fails the Connectathon tests, because the
calls to the VFS locking code do not return an EINVAL error if the
struct file_lock overflows the 32-bit boundaries.
The problem is due to the fact that we occasionally call helpers from
fs/locks.c in order to avoid RPC calls to the server when we know that a
local process holds the lock. These helpers are, of course, always
64-bit enabled, so EINVAL is not returned in cases when it would if
the call had gone to the NLM code.
For consistency, we therefore add support for a bounds-checking helper.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nfs_xdr.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 24263bb8e0be..8d780de371f0 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -832,6 +832,7 @@ struct nfs_rpc_ops { | |||
832 | int (*file_open) (struct inode *, struct file *); | 832 | int (*file_open) (struct inode *, struct file *); |
833 | int (*file_release) (struct inode *, struct file *); | 833 | int (*file_release) (struct inode *, struct file *); |
834 | int (*lock)(struct file *, int, struct file_lock *); | 834 | int (*lock)(struct file *, int, struct file_lock *); |
835 | int (*lock_check_bounds)(const struct file_lock *); | ||
835 | void (*clear_acl_cache)(struct inode *); | 836 | void (*clear_acl_cache)(struct inode *); |
836 | }; | 837 | }; |
837 | 838 | ||