On Wed, Sep 29, 2021 at 02:07:12PM +0200, Stefano Garzarella wrote:
> On Wed, Sep 29, 2021 at 02:46:52PM +0300, Dan Carpenter wrote:
> > On Wed, Sep 29, 2021 at 02:37:42PM +0300, Dan Carpenter wrote:
> > > 89 /* The last byte is the status and we checked if the last
> > > iov has
> > > 90 * enough room for it.
> > > 91 */
> > > 92 to_push = vringh_kiov_length(&vq->in_iov) - 1;
> > >
> > > Are you positive that vringh_kiov_length() cannot be zero? I looked at
> > > the range_check() and there is no check for "if (*len == 0)".
> > >
> > > 93
> > > 94 to_pull = vringh_kiov_length(&vq->out_iov);
> > > 95
> > > 96 bytes = vringh_iov_pull_iotlb(&vq->vring, &vq->out_iov,
> > > &hdr,
> > > 97 sizeof(hdr));
> > > 98 if (bytes != sizeof(hdr)) {
> > > 99 dev_err(&vdpasim->vdpa.dev, "request out header
> > > too short\n");
> > > 100 return false;
> > > 101 }
> > > 102
> > > 103 to_pull -= bytes;
> > >
> > > The same "bytes" is used for both to_pull and to_push. In this
> > > assignment it would only be used for the default case which prints an
> > > error message.
> > >
> >
> > Sorry, no. This part is wrong. "bytes" is not used for "to_push"
> > either here or below. But I still am not sure "*len == 0" or how we
>
> At line 84 we check that the last `in_iov` has at least one byte, so
> vringh_kiov_length(&vq->in_iov) cannot be zero.
> It will return the sum of all lengths, so at least 1.
>
> Maybe better to add a comment.
>
> > know that "to_push >= VIRTIO_BLK_ID_BYTES".
>
> vringh_iov_push_iotlb() will push at least the bytes available in `in_iov`,
> if these are less, it will copy less bytes of VIRTIO_BLK_ID_BYTES.
>
> Maybe here it would be better to add a check because the driver isn't
> following the specification.
>
> And I'd avoid the subtraction highlighted by Smatch static checker.
>
> Thanks for reporting. I'll send patches to fix these issues.
Nothing to fix, really. I've looked at what you've explained and it's
all true so the code is fine as-is. Thanks so much.
regards,
dan carpenter
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization