From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 210B21FF13C for ; Thu, 19 Feb 2026 15:54:22 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1C2EE17CCD; Thu, 19 Feb 2026 15:55:21 +0100 (CET) Message-ID: <7e936548-ee2e-4452-83f1-8c95ed1678d7@proxmox.com> Date: Thu, 19 Feb 2026 15:55:15 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH qemu-server v2] fix #5578: smbios: set serial number To: Manuel Federanko , pve-devel@lists.proxmox.com References: <20260219111945.61300-1-m.federanko@proxmox.com> Content-Language: en-US From: Fiona Ebner In-Reply-To: <20260219111945.61300-1-m.federanko@proxmox.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1771512906384 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.016 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: BYOVEFQAUO3U2LWRT6EN4XVVUPZVQV4B X-Message-ID-Hash: BYOVEFQAUO3U2LWRT6EN4XVVUPZVQV4B X-MailFrom: f.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Am 19.02.26 um 12:19 PM schrieb Manuel Federanko: > If no smbios options are given on creation, default to generate a serial > number. This is required for Windows Autopilot to identify a user > device. > Use the already generated smbios uuid as serial number, it should be > unique enough for our purposes. The bug report mentions VMWare using "VMware-42 xx yy zz .....". Maybe we should also use a "Proxmox-" prefix or similar? I do wonder if we should set this unconditionally or somehow guard it, e.g. only do it for win11 OS type, or if guarding would be overly cautious. It does only affect new VMs, so if this does cause some kind of regression, we can still adapt it again. > The base64 here is needed since all configuration options are stored as > a base64 encoded string, which is ensured by the format. This ensures > that the values are properly decoded in the gui, for example. > > Since all fields are forced to be stored in base64 format it might make > sense for a future patch to a) remove the flag or b) allow values > different than base64 encoded data in the other fields. Note that absence of the flag is needed for backwards compatibility with pre-existing configuration files (also in backups) from before the flag was introduced [0]. If the base64=1 is not set, the values are interpreted directly and not decoded first. > Tested by creating a new vm via the gui and command line. > > Signed-off-by: Manuel Federanko > --- > Changes since v1: > * switch serial to be the same uuid > * use print_smbios1 over manually constructing strings > * remove the dedicated generate_smbios1_uuid subroutine > > src/PVE/API2/Qemu.pm | 9 ++++++++- > src/PVE/CLI/qm.pm | 10 +++++++++- > src/PVE/QemuServer.pm | 4 ---- > 3 files changed, 17 insertions(+), 6 deletions(-) > > diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm > index c2e185a6..bbf534e4 100644 > --- a/src/PVE/API2/Qemu.pm > +++ b/src/PVE/API2/Qemu.pm Missing use statement for MIME::Base64 > @@ -1471,7 +1471,14 @@ __PACKAGE__->register_method({ > > # auto generate uuid if user did not specify smbios1 option > if (!$conf->{smbios1}) { > - $conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid(); > + my $smbios1_uuid = PVE::QemuServer::generate_uuid(); > + my $smbios1_serial = MIME::Base64::encode_base64($smbios1_uuid, ""); > + my %smbios1 = ( Style nit: our code base mostly uses hash references rather than hashes directly. Especially, since you need to pass it along as a reference, you can already define it as such. > + uuid => $smbios1_uuid, > + serial => $smbios1_serial, > + base64 => 1, > + ); > + $conf->{smbios1} = PVE::QemuServer::print_smbios1(\%smbios1); > } > > if ( > diff --git a/src/PVE/CLI/qm.pm b/src/PVE/CLI/qm.pm > index bdae9641..0daf402d 100755 > --- a/src/PVE/CLI/qm.pm > +++ b/src/PVE/CLI/qm.pm Missing use statement for MIME::Base64 > @@ -912,7 +912,15 @@ __PACKAGE__->register_method({ > eval { > # order matters, as do_import() will load_config() internally > $conf->{vmgenid} = PVE::QemuServer::generate_uuid(); > - $conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid(); > + my $smbios1_uuid = PVE::QemuServer::generate_uuid(); > + my $smbios1_serial = MIME::Base64::encode_base64($smbios1_uuid, ""); > + my %smbios1 = ( > + uuid => $smbios1_uuid, > + serial => $smbios1_serial, > + base64 => 1, > + ); > + $conf->{smbios1} = PVE::QemuServer::print_smbios1(\%smbios1); > + > PVE::QemuConfig->write_config($vmid, $conf); > > foreach my $disk (@{ $parsed->{disks} }) { > diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm > index 545758dc..b371d00b 100644 > --- a/src/PVE/QemuServer.pm > +++ b/src/PVE/QemuServer.pm > @@ -8082,10 +8082,6 @@ sub generate_uuid { > return $uuid_str; > } > > -sub generate_smbios1_uuid { > - return "uuid=" . generate_uuid(); Rather than removing the helper here, it could be extended. This would avoid duplicating the behavior on the (previous) call sites that need it. > -} > - > sub create_reboot_request { > my ($vmid) = @_; > open(my $fh, '>', "/run/qemu-server/$vmid.reboot") [0]: https://git.proxmox.com/?p=qemu-server.git;a=commitdiff;h=1f30ac3a9f18c215d3e3c657f9e81d9d3125f46c