[pve-devel] [PATCH qemu-server] fix #4435: devices list: avoid error for undefined value

Fiona Ebner f.ebner at proxmox.com
Tue Jan 10 14:41:37 CET 2023


When $d->{'pci_bridge'}->{devices} is undef, @-dereferencing it will
die with:
> Can't use an undefined value as an ARRAY reference

This can happen (at least) when the VM is in 'prelaunch' state. The
QAPI definition for '@PciBridgeInfo' also declares the 'devices'
member as optional.

Before commit 721624b ("collect device list for nested pci-bridges"),
there was no issue, because $d->{'pci_bridge'}->{devices} was used in
foreach, so auto-vivified if undef.

Fixes: f721624b ("collect device list for nested pci-bridges")
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
 PVE/QemuServer.pm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 39fc6b09..4292da74 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -4194,7 +4194,7 @@ sub vm_devices_list {
 	my $to_check = [];
 	for my $d (@$devices_to_check) {
 	    $devices->{$d->{'qdev_id'}} = 1 if $d->{'qdev_id'};
-	    next if !$d->{'pci_bridge'};
+	    next if !$d->{'pci_bridge'} || !$d->{'pci_bridge'}->{devices};
 
 	    $devices->{$d->{'qdev_id'}} += scalar(@{$d->{'pci_bridge'}->{devices}});
 	    push @$to_check, @{$d->{'pci_bridge'}->{devices}};
-- 
2.30.2






More information about the pve-devel mailing list