From nobody Sat Sep 26 20:53:02 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=rsg.ci.i.u-tokyo.ac.jp ARC-Seal: i=1; a=rsa-sha256; t=1789378898; cv=none; d=zohomail.com; s=zohoarc; b=GKGtaKp3UOz5fr8A6h6IFd9Qr+IKeH/GtXfbovGznd1P0+CBK4uG+2bxfd0MZwvxdTjPnwL64mbadEJUz/F2AMC0toKysGKRd5NvNvSrCCslpsf29l5NlUUxe1La8PpHnkPoxXyaroSfbkEYyETw2TmvA3fNEw25Ok3W98Sx87c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789378898; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+SNjQSTjYTQuXo9g9m0nSujeJ2kduqznDiq97Hz0U9A=; b=eFKsgMRDC/4BIOfuOGw7v5lrYurZXk1KdKICQ1pm6dIUhMWl4hgsszv7Z+TgPH2CV5JC9QS+VdVy+wXLkNttNxNvyZJZsK8eNsNZMexFE7OvMjDhfPdB4D5/lAbbVoYFsT82/6f08FyxPvhupSlLYHoBKXK/o7C/rbe2TLb2gMk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789378898134518.9018039139692; Mon, 14 Sep 2026 02:41:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x63Bi-0006mI-IF; Mon, 14 Sep 2026 05:41:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x63Bg-0006lD-3F for qemu-devel@nongnu.org; Mon, 14 Sep 2026 05:41:20 -0400 Received: from www3579.sakura.ne.jp ([49.212.243.89]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x63Be-0001sN-8v for qemu-devel@nongnu.org; Mon, 14 Sep 2026 05:41:19 -0400 Received: from h183.csg.ci.i.u-tokyo.ac.jp (h183.csg.ci.i.u-tokyo.ac.jp [133.11.54.183]) (authenticated bits=0) by www3579.sakura.ne.jp (8.16.1/8.16.1) with ESMTPSA id 68E9fCdK025133 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 14 Sep 2026 18:41:16 +0900 (JST) (envelope-from odaki@rsg.ci.i.u-tokyo.ac.jp) DKIM-Signature: a=rsa-sha256; bh=+SNjQSTjYTQuXo9g9m0nSujeJ2kduqznDiq97Hz0U9A=; c=relaxed/relaxed; d=rsg.ci.i.u-tokyo.ac.jp; h=From:Message-Id:To:Subject:Date; s=rs20250326; t=1789378876; v=1; b=nTFtgCec76ve+o/lL8qIz4Ts+BfPrwuH3yqo7KAXJbWIIg5KWMNsUFJt0ZX6avvb tdHIVltOS6XLK5KiNTXroyYV7+K+kC13/Bp83p+VTwEZDiqP0nXax6RUcH2ckwSW BXBv93/qRL+E+D51L5GUyr6vzmv89vJ4D8ioxvfi4+2i32rh8fJBgRtUY98/Jgut z/5w79YhKo1n8LWj/gPEJhUJI9vPhN1/hMEj9biAlCkY/P8M5jazoDvHJFjVi8kL 9vW8CUFQDF+JOnZOdQnhvbmotSddUcScd5zB57qnBZ0CtZl4a1hCN9QaSiv6jhpC fEMBB1h3Ow37ox9k7v5mFg== From: Akihiko Odaki Date: Mon, 14 Sep 2026 18:40:40 +0900 Subject: [PATCH] hw/display/virtio-gpu: Block migration with large blobs MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260914-block-v1-1-4df9617573ca@rsg.ci.i.u-tokyo.ac.jp> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDIzMDcyNL3aSc/ORsXaPUtBQzs9RkI+PkFCWg2oKi1LTMCrA50bEQfnFpUlZ qcglIM1RFUWphKdCCEqiy2loAn/4SaH4AAAA= X-Change-ID: 20260729-block-2efd66ec23cd To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , =?utf-8?q?Alex_Benn=C3=A9e?= , Dmitry Osipenko , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Akihiko Odaki X-Mailer: b4 0.17-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3451; i=odaki@rsg.ci.i.u-tokyo.ac.jp; h=from:subject:message-id; bh=KDvmjJ8HEQ2mdrZ7njg5NilOU8qMlDM0NwKIRwriYYc=; b=owGbwMvMwCWmMbc20y1CyJDxtFoSQ9byg6aHluu+lf6Y3XJK1irDk29hRa721PUzDctXZsQsX 3UmaI9vRykLgxgXg6yYIktK0W5ujejaT4UJ8S0wc1iZQIYwcHEKwER2lzP8DzJ3NFhvvmrSnRem ZvHX+kQ9y8QfKzSaP53Pqr178Y/eDYwMb6byRn52YVt7uG5/juaXkoXTLnYliR/bLFH5Pl//wad MFgA= X-Developer-Key: i=odaki@rsg.ci.i.u-tokyo.ac.jp; a=openpgp; fpr=AEDC03C9AF734F2EC26A7BFFA4BAEAA73536753C Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=49.212.243.89; envelope-from=odaki@rsg.ci.i.u-tokyo.ac.jp; helo=www3579.sakura.ne.jp X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @rsg.ci.i.u-tokyo.ac.jp) X-ZM-MESSAGEID: 1789378898423158500 The blob size is encoded as a 64-bit integer in the virtio protocol, but it is encoded as a 32-bit integer in the migration stream, and a large blob whose size cannot be expressed in a 32-bit integer will be corrupted after migration. Block migration with such large blobs, and, if it is not possible, deny creating a large blob. Fixes: f66767f75c9c ("virtio-gpu: add virtio-gpu/blob vmstate subsection") Fixes: 10b9ddbc83b9 ("Revert "virtio-gpu: block migration of VMs with blob= =3Dtrue"") Signed-off-by: Akihiko Odaki --- Supersedes: <20260727-blob-v2-1-d0b9af38a975@rsg.ci.i.u-tokyo.ac.jp> ("[PATCH v2] hw/display/virtio-gpu: Reject non-migratable large blobs") --- hw/display/virtio-gpu.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index bb0f41bb1e05..5d43ffb99184 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -27,6 +27,7 @@ #include "hw/virtio/virtio-gpu-pixman.h" #include "hw/virtio/virtio-bus.h" #include "hw/core/qdev-properties.h" +#include "migration/blocker.h" #include "qemu/log.h" #include "qemu/memfd.h" #include "qemu/module.h" @@ -35,6 +36,9 @@ =20 #define VIRTIO_GPU_VM_VERSION 1 =20 +static size_t num_large_blobs; +static Error *large_blob_blocker; + static struct virtio_gpu_simple_resource * virtio_gpu_find_check_resource(VirtIOGPU *g, uint32_t resource_id, const char *caller, uint32_t *error); @@ -355,6 +359,7 @@ end: static void virtio_gpu_resource_create_blob(VirtIOGPU *g, struct virtio_gpu_ctrl_command= *cmd) { + Error *local_err =3D NULL; struct virtio_gpu_simple_resource *res; struct virtio_gpu_resource_create_blob cblob; int ret; @@ -415,6 +420,26 @@ static void virtio_gpu_resource_create_blob(VirtIOGPU = *g, } } =20 + if (cblob.size > UINT32_MAX) { + if (!num_large_blobs) { + error_setg(&large_blob_blocker, + "a large virtio-gpu blob is present"); + if (migrate_add_blocker(&large_blob_blocker, &local_err)) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: blocking migration for a large blob fai= led: %s\n", + __func__, error_get_pretty(local_err)); + error_free(local_err); + cmd->error =3D VIRTIO_GPU_RESP_ERR_UNSPEC; + virtio_gpu_fini_udmabuf(res); + virtio_gpu_cleanup_mapping(g, res); + g_free(res); + return; + } + } + + num_large_blobs++; + } + QTAILQ_INSERT_HEAD(&g->reslist, res, next); } =20 @@ -460,6 +485,13 @@ static void virtio_gpu_resource_destroy(VirtIOGPU *g, { virtio_gpu_disable_scanout_for_resource(g, res->resource_id); =20 + if (res->blob_size > UINT32_MAX) { + num_large_blobs--; + if (!num_large_blobs) { + migrate_del_blocker(&large_blob_blocker); + } + } + qemu_pixman_image_unref(res->image); virtio_gpu_cleanup_mapping(g, res); QTAILQ_REMOVE(&g->reslist, res, next); --- base-commit: 209b2afaface001c7d4d981e38f186afe7b24a50 change-id: 20260729-block-2efd66ec23cd Best regards, -- =20 Akihiko Odaki