From nobody Tue Sep 9 19:05:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1737765817; cv=none; d=zohomail.com; s=zohoarc; b=QjKrDz3M3y0zXu7ZWQ76QNgjYZhGQMlagWO9fuc6+IuqeYPSqXNCWjCMO3zLdpkKVx/wihvi4qK3teAyMySwRyFR8IlNX9qHJqLolTBNoPNRpTJ47XrWU5WWlMZHNG1r9Wdhj1kviMa12s6OCsDwmPpF+dnyWgb+vSdPcyHayzw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737765817; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=yOZeOJfcC2fCvWTDsNVJDVkuphwYzMn+TJYZasP9JYw=; b=dgQtn2W79Uf5rzCNXGF/EmZs1ge2HEqX6RG4/g8BmRyQOhho4q6dMJ7x0/LfuuBkFaMZvOjqfhQaVduqbILtOmL3H6rma5MkBEVdMHWA9FKjKVCjC3EHCakvcZGqdXzPwkQCN98YW6VrC2zfrrVAOD17teIieduULvZJTfjG9/0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1737765817177527.7046539028074; Fri, 24 Jan 2025 16:43:37 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 43B911652; Fri, 24 Jan 2025 19:43:36 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 412D91664; Fri, 24 Jan 2025 19:42:46 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 634AC159D; Fri, 24 Jan 2025 19:42:42 -0500 (EST) Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 693F81296 for ; Fri, 24 Jan 2025 19:42:41 -0500 (EST) Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-aaf57c2e0beso563797566b.3 for ; Fri, 24 Jan 2025 16:42:41 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ac495d56669sm2295937a12.58.2025.01.24.16.42.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 16:42:39 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1737765760; x=1738370560; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=XiQqbz9WMtlyUEhUV0lJB3cPJLKwphgxzuwSQ9JYDx4=; b=KfID7YMw/IsB+jVz+OacrmFi6GQkOwpEojxYJoU1Embg1MazVXm3OhTnpNHi0rNFfG 3odZ9h4afz45meQzoJx6yc4/Z0xR9lqw+haAK4bBlCwYjFTXc5rF2qTW/Q4YOMVcKmVR ehvEMbKW3ng5a3G8Na+yQxFbKLQ6f/uCaCMEmdIEM2ubOGNCVvFbuQ7H1AXVvXTWH2WR IsY9Hmnyqeg8NbHuENii+8duwWtj30Tc1mMEklnD3mp7Ql2M4/1zeN5g1LTu5gqNySXR NyV3OrqsB88EeO3Izb9xGQTYGpo2ldqW1BnehAr1V/Q2+ZRXSSz5UTGaGno8dVpPms5V TE3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737765760; x=1738370560; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XiQqbz9WMtlyUEhUV0lJB3cPJLKwphgxzuwSQ9JYDx4=; b=I+UpgitJIli1j4dZ6VdinJVZqbd0bFh8+UQ3PR2t65fzl/8bbZPnxXXh+I/3inSzzT TDrNY/3A0rNyMDa+1LnyAEktb26/MYO25COY8ZVELxn+jYmmtpYcfY5Qco8g5ZnD+RS0 0IbAOGTGxPwmDriwXPU84UDU5uvGySpXpF9e75tqX+DJbqWqRwqVf/weAbtwPA4wu8jV GUyIeEIM/Iueuilvwuj/NowTvZjKNhJYcqb/D5jZ3LQJz0hqayZ3q7tX9qysHDBJZ63b 2/V6BmEhKr9QQmrq+bdtsS5p68AG4BdaRmhAYWL346Dq7XaPXbqRmUdToeKwEPYo5gbu /TrQ== X-Gm-Message-State: AOJu0YwEO7lHaoQE/BLcES5uhj3OWvATVcsKdRoVm/os3PzeVXm1xwFZ BTUzPYJT2R3WkdAe0xN9b0DOoHBJqB3MXdqXmN6MOQocrZTSUgU3AxzjkXfSNdzpgduY0+EtXWQ P X-Gm-Gg: ASbGncvhlhw8BxQZvza+1usDwUtoQPXtWd9JuKmf8n2IIRO2CBX6P4INDpumisLOLws FLT/ZDMYz1EpZ26HR08+tWRF94GA8il80D1iR0LtMEd4WYOqOlMM/kWsshgrTbP9Lj5lhy+uuNn nm1IVfw2T5yC3Bki3tmlpytFmJ3Ux3J6s5vgnhlPDQbgteaQlFgZFl2fe0XxMoXMhmGIAt0drE0 cSeND7p1nhGRyCUL46XHWe73IAJ2xZvqNpFHGCr0DqA2/WgZgQb0p+Ywo7Rp4wUnowV5lYuQAnZ lkWnayvS9Tsv6UGYlqu+IBKoI9D9PsKv5w== X-Google-Smtp-Source: AGHT+IH3I9w1G6LmEFbykIQosIqmXY4A7DaSbk1UwhW86uj80H3geU8Zq4YLh5VV/gKs0Xeuo8ppzQ== X-Received: by 2002:a17:907:c29:b0:ab6:621a:f87e with SMTP id a640c23a62f3a-ab6621afd0fmr1145621666b.41.1737765760210; Fri, 24 Jan 2025 16:42:40 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH 1/2] qemu: Decompose qemuSaveImageOpen Date: Fri, 24 Jan 2025 17:37:07 -0700 Message-ID: <20250125004236.7741-2-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250125004236.7741-1-jfehlig@suse.com> References: <20250125004236.7741-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4ATRURLHV6KQL5NT3FI2B7WXBAHBFW2I X-Message-ID-Hash: 4ATRURLHV6KQL5NT3FI2B7WXBAHBFW2I X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1737765818177019100 Content-Type: text/plain; charset="utf-8" Split the reading of libvirt's save image metadata from the opening of the fd that will be passed to QEMU. This allows improved error handling and provides more flexibility for code reading saved images. Signed-off-by: Jim Fehlig --- src/qemu/qemu_driver.c | 37 ++++++++-------- src/qemu/qemu_saveimage.c | 89 ++++++++++++++++++++++++--------------- src/qemu/qemu_saveimage.h | 16 ++++--- src/qemu/qemu_snapshot.c | 9 ++-- 4 files changed, 89 insertions(+), 62 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d2eddbd9ae..75de0b1fd5 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5775,9 +5775,12 @@ qemuDomainRestoreInternal(virConnectPtr conn, if (flags & VIR_DOMAIN_SAVE_RESET_NVRAM) reset_nvram =3D true; =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, + if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) + goto cleanup; + + fd =3D qemuSaveImageOpen(driver, path, (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) !=3D 0, - &wrapperFd, false, false); + &wrapperFd, false); if (fd < 0) goto cleanup; =20 @@ -5906,15 +5909,11 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, c= onst char *path, virQEMUDriver *driver =3D conn->privateData; char *ret =3D NULL; g_autoptr(virDomainDef) def =3D NULL; - int fd =3D -1; virQEMUSaveData *data =3D NULL; =20 virCheckFlags(VIR_DOMAIN_SAVE_IMAGE_XML_SECURE, NULL); =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, - false, NULL, false, false); - - if (fd < 0) + if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) goto cleanup; =20 if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0) @@ -5924,7 +5923,6 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, con= st char *path, =20 cleanup: virQEMUSaveDataFree(data); - VIR_FORCE_CLOSE(fd); return ret; } =20 @@ -5948,8 +5946,10 @@ qemuDomainSaveImageDefineXML(virConnectPtr conn, con= st char *path, else if (flags & VIR_DOMAIN_SAVE_PAUSED) state =3D 0; =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, - false, NULL, true, false); + if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) + goto cleanup; + + fd =3D qemuSaveImageOpen(driver, path, 0, NULL, false); =20 if (fd < 0) goto cleanup; @@ -6007,7 +6007,6 @@ qemuDomainManagedSaveGetXMLDesc(virDomainPtr dom, uns= igned int flags) g_autofree char *path =3D NULL; char *ret =3D NULL; g_autoptr(virDomainDef) def =3D NULL; - int fd =3D -1; virQEMUSaveData *data =3D NULL; qemuDomainObjPrivate *priv; =20 @@ -6029,15 +6028,14 @@ qemuDomainManagedSaveGetXMLDesc(virDomainPtr dom, u= nsigned int flags) goto cleanup; } =20 - if ((fd =3D qemuSaveImageOpen(driver, priv->qemuCaps, path, &def, &dat= a, - false, NULL, false, false)) < 0) + if (qemuSaveImageGetMetadata(driver, priv->qemuCaps, path, + &def, &data, false) < 0) goto cleanup; =20 ret =3D qemuDomainDefFormatXML(driver, priv->qemuCaps, def, flags); =20 cleanup: virQEMUSaveDataFree(data); - VIR_FORCE_CLOSE(fd); virDomainObjEndAPI(&vm); return ret; } @@ -6093,14 +6091,17 @@ qemuDomainObjRestore(virConnectPtr conn, virQEMUSaveData *data =3D NULL; virFileWrapperFd *wrapperFd =3D NULL; =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, - bypass_cache, &wrapperFd, false, true); - if (fd < 0) { - if (fd =3D=3D -3) + ret =3D qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, true= ); + if (ret < 0) { + if (ret =3D=3D -3) ret =3D 1; goto cleanup; } =20 + fd =3D qemuSaveImageOpen(driver, path, bypass_cache, &wrapperFd, false= ); + if (fd < 0) + goto cleanup; + if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { int hookret; =20 diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 69617e07eb..76d9e96792 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -522,58 +522,35 @@ qemuSaveImageGetCompressionProgram(const char *imageF= ormat, =20 =20 /** - * qemuSaveImageOpen: + * qemuSaveImageGetMetadata: * @driver: qemu driver data * @qemuCaps: pointer to qemuCaps if the domain is running or NULL * @path: path of the save image * @ret_def: returns domain definition created from the XML stored in the = image * @ret_data: returns structure filled with data from the image header - * @bypass_cache: bypass cache when opening the file - * @wrapperFd: returns the file wrapper structure - * @open_write: open the file for writing (for updates) * @unlink_corrupt: remove the image file if it is corrupted * - * Returns the opened fd of the save image file and fills the appropriate = fields - * on success. On error returns -1 on most failures, -3 if corrupt image w= as - * unlinked (no error raised). + * Open the save image file, read libvirt's save image metadata, and popul= ate + * the @ret_def and @ret_data structures. Returns 0 on success and -1 on m= ost + * failures. Returns -3 if corrupt image was unlinked (no error raised). */ int -qemuSaveImageOpen(virQEMUDriver *driver, - virQEMUCaps *qemuCaps, - const char *path, - virDomainDef **ret_def, - virQEMUSaveData **ret_data, - bool bypass_cache, - virFileWrapperFd **wrapperFd, - bool open_write, - bool unlink_corrupt) +qemuSaveImageGetMetadata(virQEMUDriver *driver, + virQEMUCaps *qemuCaps, + const char *path, + virDomainDef **ret_def, + virQEMUSaveData **ret_data, + bool unlink_corrupt) { g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); VIR_AUTOCLOSE fd =3D -1; - int ret =3D -1; g_autoptr(virQEMUSaveData) data =3D NULL; virQEMUSaveHeader *header; g_autoptr(virDomainDef) def =3D NULL; - int oflags =3D open_write ? O_RDWR : O_RDONLY; size_t xml_len; size_t cookie_len; =20 - if (bypass_cache) { - int directFlag =3D virFileDirectFdFlag(); - if (directFlag < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("bypass cache unsupported by this system")); - return -1; - } - oflags |=3D directFlag; - } - - if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, oflags, NULL)) < 0) - return -1; - - if (bypass_cache && - !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, - VIR_FILE_WRAPPER_BYPASS_CACHE))) + if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, O_RDONLY, NULL)) < 0) return -1; =20 data =3D g_new0(virQEMUSaveData, 1); @@ -671,6 +648,50 @@ qemuSaveImageOpen(virQEMUDriver *driver, *ret_def =3D g_steal_pointer(&def); *ret_data =3D g_steal_pointer(&data); =20 + return 0; +} + + +/** + * qemuSaveImageOpen: + * @driver: qemu driver data + * @path: path of the save image + * @bypass_cache: bypass cache when opening the file + * @wrapperFd: returns the file wrapper structure + * @open_write: open the file for writing (for updates) + * + * Returns the opened fd of the save image file on success, -1 on failure. + */ +int +qemuSaveImageOpen(virQEMUDriver *driver, + const char *path, + bool bypass_cache, + virFileWrapperFd **wrapperFd, + bool open_write) +{ + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); + VIR_AUTOCLOSE fd =3D -1; + int ret =3D -1; + int oflags =3D open_write ? O_RDWR : O_RDONLY; + + if (bypass_cache) { + int directFlag =3D virFileDirectFdFlag(); + if (directFlag < 0) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("bypass cache unsupported by this system")); + return -1; + } + oflags |=3D directFlag; + } + + if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, oflags, NULL)) < 0) + return -1; + + if (bypass_cache && + !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, + VIR_FILE_WRAPPER_BYPASS_CACHE))) + return -1; + ret =3D fd; fd =3D -1; =20 diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h index 0e58dd14b6..a3b9182258 100644 --- a/src/qemu/qemu_saveimage.h +++ b/src/qemu/qemu_saveimage.h @@ -69,17 +69,21 @@ qemuSaveImageStartVM(virConnectPtr conn, virDomainAsyncJob asyncJob) ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) ATTRIBUTE_NONNULL(6); =20 +int +qemuSaveImageGetMetadata(virQEMUDriver *driver, + virQEMUCaps *qemuCaps, + const char *path, + virDomainDef **ret_def, + virQEMUSaveData **ret_data, + bool unlink_corrupt) + ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5); + int qemuSaveImageOpen(virQEMUDriver *driver, - virQEMUCaps *qemuCaps, const char *path, - virDomainDef **ret_def, - virQEMUSaveData **ret_data, bool bypass_cache, virFileWrapperFd **wrapperFd, - bool open_write, - bool unlink_corrupt) - ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); + bool open_write); =20 int qemuSaveImageGetCompressionProgram(const char *imageFormat, diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 80cd54bf33..e5c41fcf67 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2377,11 +2377,12 @@ qemuSnapshotRevertExternalPrepare(virDomainObj *vm, g_autoptr(virDomainDef) savedef =3D NULL; =20 memdata->path =3D snapdef->memorysnapshotfile; - memdata->fd =3D qemuSaveImageOpen(driver, NULL, memdata->path, - &savedef, &memdata->data, - false, NULL, - false, false); + if (qemuSaveImageGetMetadata(driver, NULL, memdata->path, &savedef, + &memdata->data, false) < 0) + return -1; =20 + memdata->fd =3D qemuSaveImageOpen(driver, memdata->path, + false, NULL, false); if (memdata->fd < 0) return -1; =20 --=20 2.43.0 From nobody Tue Sep 9 19:05:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1737765841; cv=none; d=zohomail.com; s=zohoarc; b=SOJ7f0Fua7X3qEpKvHQtNBWZpgHDZnkI4IhnnstSge6wIwjbZTjS5zIDjSw4aTjlgferwL1z5UkvOl842vcF8C+Ia8JqRCDdURB4EKm6zgpH6945wUGjrni1xmPIYSqzoDS3SeVzpydFjIqSkADLULR/+wXTr9dKOGGWQZRZL8c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737765841; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=7TyhaOczo1qj7BJgJjxDBfWgAwyN6I9y00WEhS39EBM=; b=IGcrdErvlUkDltE6nRJ8wOJru1FmGBoppS4kWwQyLDTiLJXt/tm5R4FSP4fhT5eSgBBUeBp3mtPwfyB7lY9h7OjVLzj5AlJvYaLpo5DCiLg6CkhVZb6/+jZE7CBtSRueer6EuytNXnjtMIW6gFE+unoRSSozdS2ehNfiK1tI2Pc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1737765841621637.847769077987; Fri, 24 Jan 2025 16:44:01 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id AB2AF12B9; Fri, 24 Jan 2025 19:44:00 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3C4EB16B0; Fri, 24 Jan 2025 19:42:49 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 9CE8E15BB; Fri, 24 Jan 2025 19:42:45 -0500 (EST) Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3A513159B for ; Fri, 24 Jan 2025 19:42:43 -0500 (EST) Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-ab2c9b8aecaso476444466b.0 for ; Fri, 24 Jan 2025 16:42:43 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72f8a6b180bsm2536378b3a.37.2025.01.24.16.42.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 16:42:41 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1737765762; x=1738370562; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=HLVcnfwG9+G+P417eRIe1m5vVbEKfmDFhOVpM26pIi4=; b=cYkutVMnfwPNuA/9ZHian0g2ytASE0PS09UwR/DLOuKJhlsCa4jdWYd33NqJlbTMPb pwPUbqFKtGPCsVa7/IUrJYS+KH/R7ADOct1BgPSV9aXGzbLKYVZ6gKmX9uc461FmRsTR 0jqV9jSM9c6ojRvs02z+hiHWZGlLCSWaZR89cCqmj8G1qaL9AYZ2jd99aoQKwyOhuF8V O9oPowg29yMOUBH5a5qU+83HnTZL/DvjaEonwyaDVR/Z/VloH1IJtTY2sKOUr8dQDoMk tcrtn9qXvSWWE2ydEylEzcK4sLANUmhRTb3KndmfQZkU07qms6iegX7sAswMBepjpcn0 YD9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737765762; x=1738370562; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HLVcnfwG9+G+P417eRIe1m5vVbEKfmDFhOVpM26pIi4=; b=KGZSRQVNbZJ4oRGHjeD0r1LYR93g7nGpdaBWj8exz5UQ0o7UJctpo9nEnamRAlNW96 oZfhq7WYiURkmGvhtth60PYs6mtklaPVQrVFFj0StOIHMpAvXaWQVQSxaHBPocy4hOVv YihRToRQCIIN86nDvSRNakANElxJ9L+4fH30/MgjeHHytw8RRDqW8OjgNMRJQmCymOG4 CV3nHNAY8AmqRuGJbMY2BnTE2WnjUg+23PTGd+xQ5UkXoIottjah8FHB16/qN2UcIh31 W09YkiJzgJgCZAZN3QdHZZS+uo8l6vA2O10IU2brm+SvnUdPUZ46ARWd0F1Ng1BT6YKJ RLDQ== X-Gm-Message-State: AOJu0YxcRaQA1UAc3zrqFtvvDn4tIRwl+SOehISGSjKjMI5hs5+fPaOZ 8oj/2f5lsYxE6KqLHu9RO4fRnxARkG/T8zsPlVIc3C2jjt5Y2dFSNzAH7j4rXIVQgPaufxUgtcN i X-Gm-Gg: ASbGncv+fMcj5JVvB+58SK4DFGxYJfaPJEp7w9dJ8QXzWPYgmwXMvdBEa5sx92ThrQm MM6pxsMb0vfvrkxQFm18dCuFIr5pbVksb2Lr2wz/Du30tmAngDHIfTi7Fqflb7bMwDXJw7ya9/y kybrWjfzSvtHYp9JMGlgLJDHRfNY44YtD6s02WwT2yN2cLKNARcgnER/N8Cun0QIv6ZeK0A7tPE jc4qJEIu4BguodonF5kD5sRaimpazGcPkP0loyAuWLRWECbMLGqW0rN7YBewOgSXjnxr4vuO4hN Wi4KJoylzGNBs0VVMcBOvik= X-Google-Smtp-Source: AGHT+IE7NP4SL7/9Qroh1TAR/onVIAoqPWkom4u4CKkyD7Ke+3qoxZg9kwYLRJJ+xic5ajlPfUkTVA== X-Received: by 2002:a17:907:3e12:b0:aaf:208:fd3f with SMTP id a640c23a62f3a-ab38b10f4aemr2727018266b.13.1737765762038; Fri, 24 Jan 2025 16:42:42 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH 2/2] qemu: Check for valid save image format when verifying image header Date: Fri, 24 Jan 2025 17:37:08 -0700 Message-ID: <20250125004236.7741-3-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250125004236.7741-1-jfehlig@suse.com> References: <20250125004236.7741-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: DLTPCNSXAJMNRA36XGP7QMSJ7CMDBOL7 X-Message-ID-Hash: DLTPCNSXAJMNRA36XGP7QMSJ7CMDBOL7 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1737765844479019100 Content-Type: text/plain; charset="utf-8" When attempting to restore a saved image, the check for a valid save image format does not occur until the qemu process is about to be executed. Move the check earlier in the restore process, along with the other checks that verify a valid save image header. Signed-off-by: Jim Fehlig --- src/qemu/qemu_saveimage.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 76d9e96792..bcac6174ac 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -608,6 +608,12 @@ qemuSaveImageGetMetadata(virQEMUDriver *driver, return -1; } =20 + if (header->format >=3D QEMU_SAVE_FORMAT_LAST) { + virReportError(VIR_ERR_OPERATION_FAILED, + _("unsupported save image format: %1$d"), header->f= ormat); + return -1; + } + if (header->data_len <=3D 0) { virReportError(VIR_ERR_OPERATION_FAILED, _("invalid header data length: %1$d"), header->data= _len); --=20 2.43.0