[pve-devel] [PATCH v7 qemu-server 2/4] Prevent starting a 32-bit VM using a 64-bit OVMF BIOS

Fiona Ebner f.ebner at proxmox.com
Mon Feb 19 15:47:23 CET 2024


Am 19.12.23 um 10:40 schrieb Filip Schauer:
> @@ -716,6 +728,33 @@ sub get_cpu_from_running_vm {
>      return $1;
>  }
>  
> +sub get_cpu_bitness {
> +    my ($cpu_prop_str, $arch) = @_;
> +
> +    die "missing 'arch'\n" if !$arch;

The config's 'arch' defaults to the host arch, so we could do the same
here. Then callers can just pass $conf->{arch} without checking if
explicitly set. But this is also fine by me.

> +
> +    my $cputype = get_default_cpu_type($arch, 0);
> +
> +    if ($cpu_prop_str) {
> +	my $cpu = PVE::JSONSchema::parse_property_string('pve-vm-cpu-conf', $cpu_prop_str)
> +	    or die "Cannot parse cpu description: $cpu_prop_str\n";
> +
> +	my $cputype = $cpu->{cputype};
> +
> +	if (my $model = $builtin_models->{$cputype}) {
> +	    $cputype = $model->{'reported-model'};
> +	} elsif (is_custom_model($cputype)) {
> +	    my $custom_cpu = get_custom_model($cputype);
> +	    $cputype = $custom_cpu->{'reported-model'} // $cpu_fmt->{'reported-model'}->{default};
> +	}

Missing the logic for the replacement type, i.e.
	if (my $replacement_type = $depreacated_cpu_map->{$cputype}) {
	    $cputype = $replacement_type;
	}

> +    }
> +
> +    return $cputypes_32bit->{$cputype} ? 32 : 64 if $arch eq 'x86_64';
> +    return 64 if $arch eq 'aarch64';
> +
> +    die "unsupported architecture '$arch'\n";
> +}
> +
>  __PACKAGE__->register();
>  __PACKAGE__->init();
>  




More information about the pve-devel mailing list