From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 6F2C61FF138 for ; Tue, 21 Jul 2026 14:21:02 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id BEE4F2134E; Tue, 21 Jul 2026 14:21:01 +0200 (CEST) From: Thomas Ellmenreich To: pve-devel@lists.proxmox.com Subject: [PATCH] fix #7828: avoid parsing absolute paths as volume ids Date: Tue, 21 Jul 2026 14:20:45 +0200 Message-ID: <20260721122045.151215-1-t.ellmenreich@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1784636431404 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.160 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_LOW -0.7 Sender listed at https://www.dnswl.org/, low trust 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: XXRYFLONYXYYCPTTQ5RYMMHCAYRMKMXH X-Message-ID-Hash: XXRYFLONYXYYCPTTQ5RYMMHCAYRMKMXH X-MailFrom: t.ellmenreich@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 CC: Thomas Ellmenreich X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Just like in the case of cdroms, absolute paths to storage drives can be skipped when beeing marked as unused as they cannot be owned by the vm. Signed-off-by: Thomas Ellmenreich --- I'm not 100% sure that I have understood the procedure of registering unused drives correctly, but skipping this branch in the case of an absolute path as 'volid' seems to be the correct action. Alternatively, placing the condition next to the `storage_config` check could make sense, but would just achieve the same thing, as the subsequent ownership check will never succeed with an absolute path. src/PVE/QemuServer.pm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index 191ae549..782d2e7b 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -1570,12 +1570,14 @@ sub vm_is_volid_owner { sub vmconfig_register_unused_drive { my ($storecfg, $vmid, $conf, $drive) = @_; + my $volid = $drive->{file}; + if (drive_is_cloudinit($drive)) { - eval { PVE::Storage::vdisk_free($storecfg, $drive->{file}) }; + eval { PVE::Storage::vdisk_free($storecfg, $volid) }; warn $@ if $@; delete $conf->{'special-sections'}->{cloudinit}; - } elsif (!drive_is_cdrom($drive)) { - my $volid = $drive->{file}; + } elsif (!drive_is_cdrom($drive) && $volid !~ m|^/|) { + my ($storeid, undef) = PVE::Storage::parse_volume_id($volid); if (PVE::Storage::storage_config($storecfg, $storeid, 1)) { if (vm_is_volid_owner($storecfg, $vmid, $volid)) { -- 2.47.3