linux/fs/lockd
Jeff Layton 2005f5b9c3 lockd: fix races in client GRANTED_MSG wait logic
After the wait for a grant is done (for whatever reason), nlmclnt_block
updates the status of the nlm_rqst with the status of the block. At the
point it does this, however, the block is still queued its status could
change at any time.

This is particularly a problem when the waiting task is signaled during
the wait. We can end up giving up on the lock just before the GRANTED_MSG
callback comes in, and accept it even though the lock request gets back
an error, leaving a dangling lock on the server.

Since the nlm_wait never lives beyond the end of nlmclnt_lock, put it on
the stack and add functions to allow us to enqueue and dequeue the
block. Enqueue it just before the lock/wait loop, and dequeue it
just after we exit the loop instead of waiting until the end of
the function. Also, scrape the status at the time that we dequeue it to
ensure that it's final.

Reported-by: Yongcheng Yang <yoyang@redhat.com>
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2063818
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
2023-04-26 09:05:00 -04:00
..
clnt4xdr.c lockd: set file_lock start and end when decoding nlm4 testargs 2023-03-14 14:00:55 -04:00
clntlock.c lockd: fix races in client GRANTED_MSG wait logic 2023-04-26 09:05:00 -04:00
clntproc.c lockd: fix races in client GRANTED_MSG wait logic 2023-04-26 09:05:00 -04:00
clntxdr.c
host.c lockd: purge resources held on behalf of nlm clients when shutting down 2023-04-26 09:04:59 -04:00
Makefile
mon.c
netns.h filelock: move file locking definitions to separate header file 2023-01-11 06:52:32 -05:00
procfs.c
procfs.h
svc4proc.c lockd: set missing fl_flags field when retrieving args 2022-12-10 11:01:11 -05:00
svc.c sysctl-6.3-rc1 2023-02-23 14:16:56 -08:00
svclock.c lockd: fix file selection in nlmsvc_cancel_blocked 2022-12-10 11:01:11 -05:00
svcproc.c lockd: set missing fl_flags field when retrieving args 2022-12-10 11:01:11 -05:00
svcshare.c
svcsubs.c NFSD 6.2 Release Notes 2022-12-12 20:54:39 -08:00
svcxdr.h NLM: Fix svcxdr_encode_owner() 2021-09-17 10:35:10 -04:00
xdr4.c lockd: set file_lock start and end when decoding nlm4 testargs 2023-03-14 14:00:55 -04:00
xdr.c SUNRPC: Change return value type of .pc_encode 2021-10-13 11:34:49 -04:00