locks,lockd: fix race in nlmsvc_testlock
authorAndy Adamson <andros@citi.umich.edu>
Mon, 20 Mar 2006 18:44:26 +0000 (13:44 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 20 Mar 2006 18:44:26 +0000 (13:44 -0500)
commit8dc7c3115b611c00006eac3ee5b108296432aab7
treebe44c59907cbdcb6fdf46d0ad9cc140af757acfc
parent2e0af86f618c697b44e2d67dff151256c58201c4
locks,lockd: fix race in nlmsvc_testlock

posix_test_lock() returns a pointer to a struct file_lock which is unprotected
and can be removed while in use by the caller.  Move the conflicting lock from
the return to a parameter, and copy the conflicting lock.

In most cases the caller ends up putting the copy of the conflicting lock on
the stack.  On i386, sizeof(struct file_lock) appears to be about 100 bytes.
We're assuming that's reasonable.

Signed-off-by: Andy Adamson <andros@citi.umich.edu>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/lockd/svclock.c
fs/locks.c
fs/nfs/file.c
fs/nfsd/nfs4state.c
include/linux/fs.h