Message ID | a060024e4cde48b224a7b4aecae7d20423ce506f.1627306204.git.bcodding@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [V2] lockd: Fix invalid lockowner cast after vfs_test_lock | expand |
Hi Ben- > On Jul 26, 2021, at 9:33 AM, Benjamin Coddington <bcodding@redhat.com> wrote: > > V2: fix typos in patch header > > 8<------------------------------------------------------- > > 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> I've added this change provisionally to https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git/log/?h=for-next > --- > fs/lockd/svclock.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > 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; > -- > 2.30.2 > -- Chuck Lever
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;
V2: fix typos in patch header 8<------------------------------------------------------- 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> --- fs/lockd/svclock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)