lockd: ensure we use the correct file descriptor when unlocking
[ Upstream commit 69efce009f7df888e1fede3cb2913690eb829f52 ] Shared locks are set on O_RDONLY descriptors and exclusive locks are set on O_WRONLY ones. nlmsvc_unlock however calls vfs_lock_file twice, once for each descriptor, but it doesn't reset fl_file. Ensure that it does. Signed-off-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
559e7dd79f
commit
a0ebbd2486
1 changed files with 6 additions and 4 deletions
|
@ -659,11 +659,13 @@ nlmsvc_unlock(struct net *net, struct nlm_file *file, struct nlm_lock *lock)
|
|||
nlmsvc_cancel_blocked(net, file, lock);
|
||||
|
||||
lock->fl.fl_type = F_UNLCK;
|
||||
if (file->f_file[O_RDONLY])
|
||||
error = vfs_lock_file(file->f_file[O_RDONLY], F_SETLK,
|
||||
lock->fl.fl_file = file->f_file[O_RDONLY];
|
||||
if (lock->fl.fl_file)
|
||||
error = vfs_lock_file(lock->fl.fl_file, F_SETLK,
|
||||
&lock->fl, NULL);
|
||||
if (file->f_file[O_WRONLY])
|
||||
error = vfs_lock_file(file->f_file[O_WRONLY], F_SETLK,
|
||||
lock->fl.fl_file = file->f_file[O_WRONLY];
|
||||
if (lock->fl.fl_file)
|
||||
error |= vfs_lock_file(lock->fl.fl_file, F_SETLK,
|
||||
&lock->fl, NULL);
|
||||
|
||||
return (error < 0)? nlm_lck_denied_nolocks : nlm_granted;
|
||||
|
|
Loading…
Add table
Reference in a new issue