Message ID | 20250310235833.41026-1-vliaskovitis@suse.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [RFC] vfio/pci-quirks: Exclude non-ioport BAR from ATI quirk | expand |
On Tue, 11 Mar 2025 00:58:33 +0100 Vasilis Liaskovitis <vliaskovitis@suse.com> wrote: > The ATI BAR4 quirk is targeting an ioport BAR. Older devices may > have a BAR4 which is not an ioport, causing a segfault here. Test > the BAR type to skip these devices. > > Similar to > "8f419c5b: vfio/pci-quirks: Exclude non-ioport BAR from NVIDIA quirk" > > Untested, as I don't have the card to test. > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2856 > Signed-off-by: Vasilis Liaskovitis <vliaskovitis@suse.com> > --- > hw/vfio/pci-quirks.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c > index c53591fe2b..15598bbaf4 100644 > --- a/hw/vfio/pci-quirks.c > +++ b/hw/vfio/pci-quirks.c > @@ -403,7 +403,7 @@ static void vfio_probe_ati_bar4_quirk(VFIOPCIDevice *vdev, int nr) > > /* This windows doesn't seem to be used except by legacy VGA code */ > if (!vfio_pci_is(vdev, PCI_VENDOR_ID_ATI, PCI_ANY_ID) || > - !vdev->vga || nr != 4) { > + !vdev->vga || nr != 4 || !vdev->bars[4].ioport) { > return; > } > We should probably predicate calls to vfio_bar_quirk_setup() on VFIOBAR.size to avoid such segfaults, but agree this likely fixes the reported issue as well. Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
On 3/11/25 00:58, Vasilis Liaskovitis wrote: > The ATI BAR4 quirk is targeting an ioport BAR. Older devices may > have a BAR4 which is not an ioport, causing a segfault here. Test > the BAR type to skip these devices. > > Similar to > "8f419c5b: vfio/pci-quirks: Exclude non-ioport BAR from NVIDIA quirk" > > Untested, as I don't have the card to test. > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2856 > Signed-off-by: Vasilis Liaskovitis <vliaskovitis@suse.com> > --- > hw/vfio/pci-quirks.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c > index c53591fe2b..15598bbaf4 100644 > --- a/hw/vfio/pci-quirks.c > +++ b/hw/vfio/pci-quirks.c > @@ -403,7 +403,7 @@ static void vfio_probe_ati_bar4_quirk(VFIOPCIDevice *vdev, int nr) > > /* This windows doesn't seem to be used except by legacy VGA code */ > if (!vfio_pci_is(vdev, PCI_VENDOR_ID_ATI, PCI_ANY_ID) || > - !vdev->vga || nr != 4) { > + !vdev->vga || nr != 4 || !vdev->bars[4].ioport) { > return; > } > Applied to vfio-next. Thanks, C.
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c index c53591fe2b..15598bbaf4 100644 --- a/hw/vfio/pci-quirks.c +++ b/hw/vfio/pci-quirks.c @@ -403,7 +403,7 @@ static void vfio_probe_ati_bar4_quirk(VFIOPCIDevice *vdev, int nr) /* This windows doesn't seem to be used except by legacy VGA code */ if (!vfio_pci_is(vdev, PCI_VENDOR_ID_ATI, PCI_ANY_ID) || - !vdev->vga || nr != 4) { + !vdev->vga || nr != 4 || !vdev->bars[4].ioport) { return; }
The ATI BAR4 quirk is targeting an ioport BAR. Older devices may have a BAR4 which is not an ioport, causing a segfault here. Test the BAR type to skip these devices. Similar to "8f419c5b: vfio/pci-quirks: Exclude non-ioport BAR from NVIDIA quirk" Untested, as I don't have the card to test. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2856 Signed-off-by: Vasilis Liaskovitis <vliaskovitis@suse.com> --- hw/vfio/pci-quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)