On Mon, Jul 22, 2019 at 04:36:09PM +0100, Robin Murphy wrote: > On 22/07/2019 15:55, Eric Auger wrote: > > Do not call dma_max_mapping_size for devices that have no DMA > > mask set, otherwise we can hit a NULL pointer dereference. > > > > This occurs when a virtio-blk-pci device is protected with > > a virtual IOMMU. > > > > Fixes: e6d6dd6c875e ("virtio: Introduce virtio_max_dma_size()") > > Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx> > > Suggested-by: Christoph Hellwig <hch@xxxxxx> > > --- > > drivers/virtio/virtio_ring.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > > index c8be1c4f5b55..37c143971211 100644 > > --- a/drivers/virtio/virtio_ring.c > > +++ b/drivers/virtio/virtio_ring.c > > @@ -262,7 +262,7 @@ size_t virtio_max_dma_size(struct virtio_device *vdev) > > { > > size_t max_segment_size = SIZE_MAX; > > - if (vring_use_dma_api(vdev)) > > + if (vring_use_dma_api(vdev) && vdev->dev.dma_mask) > > Hmm, might it make sense to roll that check up into vring_use_dma_api() > itself? After all, if the device has no mask then it's likely that other DMA > API ops wouldn't really work as expected either. > > Robin. Nope, Eric pointed out it's just dma_addressing_limited that is broken. Other APIs call dma_get_mask which handles the NULL mask case fine. > > max_segment_size = dma_max_mapping_size(&vdev->dev); > > return max_segment_size; > > _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization