diff options
author | Benjamin Coddington <bcodding@redhat.com> | 2021-07-26 09:33:28 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2021-09-15 09:50:41 +0200 |
commit | c9773f42c1debe4d942eb8f05909a98bc8ec9e62 (patch) | |
tree | ced6455c660789e128cf17863b8a9e9524b8150f /fs | |
parent | 2600861b9069d57bff1cac0e73fd3aac4f181df1 (diff) | |
download | linux-stable-c9773f42c1debe4d942eb8f05909a98bc8ec9e62.tar.gz linux-stable-c9773f42c1debe4d942eb8f05909a98bc8ec9e62.tar.bz2 linux-stable-c9773f42c1debe4d942eb8f05909a98bc8ec9e62.zip |
lockd: Fix invalid lockowner cast after vfs_test_lock
[ Upstream commit cd2d644ddba183ec7b451b7c20d5c7cc06fcf0d7 ]
After calling vfs_test_lock() the pointer to a conflicting lock can be
returned, and that lock is not guarunteed to be owned by nlm. In that
case, we cannot cast it to struct nlm_lockowner. Instead return the pid
of that conflicting lock.
Fixes: 646d73e91b42 ("lockd: Show pid of lockd for remote locks")
Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/lockd/svclock.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index 61d3cc2283dc..498cb70c2c0d 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c @@ -634,7 +634,7 @@ nlmsvc_testlock(struct svc_rqst *rqstp, struct nlm_file *file, conflock->caller = "somehost"; /* FIXME */ conflock->len = strlen(conflock->caller); conflock->oh.len = 0; /* don't return OH info */ - conflock->svid = ((struct nlm_lockowner *)lock->fl.fl_owner)->pid; + conflock->svid = lock->fl.fl_pid; conflock->fl.fl_type = lock->fl.fl_type; conflock->fl.fl_start = lock->fl.fl_start; conflock->fl.fl_end = lock->fl.fl_end; |