From: Halil Pasic <pasic@linux.ibm.com>
To: Tony Krowiak <akrowiak@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>,
linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
cohuck@redhat.com, pasic@linux.vnet.ibm.com,
jjherne@linux.ibm.com, jgg@nvidia.com,
alex.williamson@redhat.com, kwankhede@nvidia.com,
david@redhat.com
Subject: Re: [PATCH 1/2] s390/vfio-ap: r/w lock for PQAP interception handler function pointer
Date: Thu, 19 Aug 2021 23:42:12 +0200 [thread overview]
Message-ID: <20210819234212.7e21f699.pasic@linux.ibm.com> (raw)
In-Reply-To: <8df389f7-44aa-978e-84d8-96c625b0470b@linux.ibm.com>
On Thu, 19 Aug 2021 09:36:34 -0400
Tony Krowiak <akrowiak@linux.ibm.com> wrote:
> >>> static int handle_pqap(struct kvm_vcpu *vcpu)
> >>> {
> >>> struct ap_queue_status status = {};
> >>> + crypto_hook pqap_hook;
> >>> unsigned long reg0;
> >>> int ret;
> >>> uint8_t fc;
> >>> @@ -657,15 +658,16 @@ static int handle_pqap(struct kvm_vcpu *vcpu)
> >>> * Verify that the hook callback is registered, lock the owner
> >>> * and call the hook.
> >>> */
> >>> + down_read(&vcpu->kvm->arch.crypto.pqap_hook_rwsem);
> >>> if (vcpu->kvm->arch.crypto.pqap_hook) { <--- HERE
> >>> - if (!try_module_get(vcpu->kvm->arch.crypto.pqap_hook->owner))
> >>> - return -EOPNOTSUPP;
> >>> - ret = vcpu->kvm->arch.crypto.pqap_hook->hook(vcpu);
> >>> - module_put(vcpu->kvm->arch.crypto.pqap_hook->owner);
> >>> + pqap_hook = *vcpu->kvm->arch.crypto.pqap_hook;
> >> Dont we have to check for NULL here? If not can you add a comment why?
> > I believe we did the necessary check on the line I just marked with
> > "<--- HERE".
> >
> > I find that "*" operator confusing in this context as it doesn't do
> > any good for us. I believe this situation is described in 6.5.3.2.4 of
> > the c11 standard. For convenience I will cite from the corresponding
> > draft:
> > "The unary * operator denotes indirection. If the operand points to a
> > function, the result is a function designator; if it points to an
> > object, the result is an lvalue designating the object. If the operand
> > has type ‘‘pointer to type’’, the result has type ‘‘type’’. If an
> > invalid value has been assigned to the pointer, the behavior of the
> > unary * operator is undefined."
> >
> > Frankly I also fail to see the benefit of introducing the local variable
> > named "pqap_hook", but back then I decided to not complain about style.
>
> The vcpu->kvm->arch.crypto.pqap_hook is a pointer to a function
> pointer. The actual function pointer is stored in matrix_mdev->pqap_hook,
> the reason being that the handle_pqap function in vfio_ap_ops.c
> retrieves the matrix_mdev via a container_of macro. The dereferencing
> of the vcpu->kvm->arch.crypto.pqap_hook into a local variable was
> to get the function pointer. There may have been a more stylish
> way of doing this, but the functionality is there.
You are right, and I was wrong. But then we do have to distinct pointer
deferences, and we check for NULL only once.
I still do believe we do not have a potential null pointer dereference
here, but the reason for that is that vfio-ap (the party that manages
these pointers) guarantees that whenever
vcpu->kvm->arch.crypto.pqap_hook != NULL is true,
*vcpu->kvm->arch.crypto.pqap_hook != NULL is also true (and also that
the function pointer is a valid one). Which is the case, because we
set matrix_mdev->pqap_hook in vfio_ap_mdev_create() and don't touch
it any more.
In my opinion it is worth a comment.
>
> >
> > Regards,
> > Halil
> >
> >>
> >>> + ret = pqap_hook(vcpu);
BTW the second dereference takes place here.
If we wanted, we could make sure we don't dereference a null pointer
here but I think that would be an overkill.
Regards,
Halil
> >> [...]
next prev parent reply other threads:[~2021-08-19 21:42 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-19 19:35 [PATCH 0/2] s390/vfio-ap: do not open code locks for VFIO_GROUP_NOTIFY_SET_KVM notification Tony Krowiak
2021-07-19 19:35 ` [PATCH 1/2] s390/vfio-ap: r/w lock for PQAP interception handler function pointer Tony Krowiak
2021-08-18 17:03 ` Christian Borntraeger
2021-08-18 23:25 ` Halil Pasic
2021-08-19 6:56 ` Christian Borntraeger
2021-08-19 13:36 ` Tony Krowiak
2021-08-19 21:42 ` Halil Pasic [this message]
2021-08-23 13:08 ` Tony Krowiak
2021-08-19 13:20 ` Tony Krowiak
2021-08-19 17:54 ` Alex Williamson
2021-08-19 17:58 ` Jason Gunthorpe
2021-08-20 15:59 ` Tony Krowiak
2021-08-20 22:05 ` Tony Krowiak
2021-08-20 22:30 ` Jason Gunthorpe
2021-08-23 15:17 ` Tony Krowiak
2021-08-20 22:41 ` Alex Williamson
2021-08-23 20:51 ` Tony Krowiak
2021-07-19 19:35 ` [PATCH 2/2] s390/vfio-ap: replace open coded locks for VFIO_GROUP_NOTIFY_SET_KVM notification Tony Krowiak
2021-07-21 14:45 ` Halil Pasic
2021-07-22 13:09 ` Tony Krowiak
2021-07-23 14:26 ` Halil Pasic
2021-07-23 21:24 ` Tony Krowiak
2021-07-26 20:36 ` Halil Pasic
2021-07-26 22:03 ` Jason Gunthorpe
2021-07-26 22:43 ` Halil Pasic
2021-07-28 13:43 ` Tony Krowiak
2021-07-28 19:42 ` Halil Pasic
2021-07-30 13:33 ` Tony Krowiak
2021-07-27 6:54 ` Christoph Hellwig
2021-07-21 19:37 ` Jason J. Herne
2021-07-22 13:16 ` Tony Krowiak
2021-08-02 13:10 ` [PATCH 0/2] s390/vfio-ap: do not open code " Tony Krowiak
2021-08-02 13:53 ` Halil Pasic
2021-08-02 16:32 ` Tony Krowiak
2021-08-03 13:08 ` Jason Gunthorpe
2021-08-03 13:34 ` Tony Krowiak
2021-08-18 15:59 ` Christian Borntraeger
2021-08-18 16:39 ` Alex Williamson
2021-08-18 16:50 ` Christian Borntraeger
2021-08-18 22:52 ` Halil Pasic
2021-08-19 15:30 ` Cornelia Huck
2021-08-20 14:24 ` Tony Krowiak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210819234212.7e21f699.pasic@linux.ibm.com \
--to=pasic@linux.ibm.com \
--cc=akrowiak@linux.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=jgg@nvidia.com \
--cc=jjherne@linux.ibm.com \
--cc=kwankhede@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pasic@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).