hw/vfio/pci-quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
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;
}
--
2.46.0
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.
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>
© 2016 - 2025 Red Hat, Inc.