]> git.proxmox.com Git - qemu-server.git/commitdiff
fix #4435: devices list: avoid error for undefined value
authorFiona Ebner <f.ebner@proxmox.com>
Tue, 10 Jan 2023 13:41:37 +0000 (14:41 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 11 Jan 2023 09:14:44 +0000 (10:14 +0100)
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@proxmox.com>
PVE/QemuServer.pm

index 39fc6b09f998d07bab99159f9ebe3b51b644cd2b..4292da74c8bb99fe794e619ed9b09a26aeb0d3fd 100644 (file)
@@ -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}};