diff mbox series

lockd: Fix invalid lockowner cast after vfs_test_lock

Message ID f94e02c019495fea4495fbef7498f342d5848dac.1627217317.git.bcodding@redhat.com (mailing list archive)
State New, archived
Headers show
Series lockd: Fix invalid lockowner cast after vfs_test_lock | expand

Commit Message

Benjamin Coddington July 25, 2021, 12:49 p.m. UTC
After calling vfs_test_lock() the pointer to a conflicting lock can be
returned, and that lock is not garunteed to 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>
---
 fs/lockd/svclock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff mbox series

Patch

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;