From nobody Sat Sep 26 21:37:18 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1787678533; cv=pass; d=zohomail.com; s=zohoarc; b=ht8xZxClfmchiy4+TGgjk2FXpJ4S8Ab1onXkDsXSoe8chZisu9eKUskI1r/e5OR7GKkuwniyjb9HT7cgJ3r2HHuyfbxPbMXqaE7ulITjnjDiQ8ptRL+LNXtmWvihn4IRtfKen1Yz0cN65qwmb7NdIXdxNW19ztqcVxkaxrJ+O54= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787678533; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sfZCM7F8lYhz4G9t1lD8TEL+j0jCRjihKHR0uEksOt8=; b=NL7ZI2cCbRxv+OeexZ71rGBm9+2CZRg8I2XS08yJ63qJj8dygt98vlqq+LpBx1jszFxR5BERhxxhaIRDV2hnj4OI8FAb/AGk1QnavP1SqRay8yWgiFN0cCWko7cM6C9MWpkVo+KIWejsm0N9reic8/ixEEC+NeYs+Z1fqRXdX4Q= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787678533369358.04093222679785; Tue, 25 Aug 2026 10:22:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyuq7-0005fy-A3; Tue, 25 Aug 2026 13:21:35 -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 1wyuq6-0005fn-8P for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:21:34 -0400 Received: from mail-francecentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20a::7] helo=PA4PR04CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyuq3-00058O-V4 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:21:34 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PA4PR08MB5902.eurprd08.prod.outlook.com (2603:10a6:102:e0::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.6; Tue, 25 Aug 2026 17:20:59 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0339.012; Tue, 25 Aug 2026 17:20:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r2ef91pJHOj59CCKH86/xAGVJQTZyPpIe5xn4QJn4yH74Xy+Hc4BNLkfQu00okAg1Srxx5Sy/JhjvO5oLA7uU2oHXExF+wM1FmDs1Hrx7JCduUcTvEx+PRl+yo4rHx5k8rDH0H22J8905DbSeXs0VFLJelPhGO9aLNlSUQgFISdhkLw2H6EqkmU437whlHgz/EOR6W+XWdO9QQxImJbgF05C0pwLNmAkr+lw1TNlny/5JJ/eUdYiazb/7u5Z3QvagwGx3gELefY6ABfOe6ODCAHjcwcOlo9fPvZTqbTg3V9R1IkI5UZd8VZhFYvLPRAiRG1sePLWAP0eXwcmxR6fSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sfZCM7F8lYhz4G9t1lD8TEL+j0jCRjihKHR0uEksOt8=; b=CJ7VzHFLrr5yNbCHqhG8UasTTGWgXiEy2qxTJ8lVRDNlwFUW98Et86Tz+1pVlckLQ1PPdbNxYMy4jLd784mntfMgbQdkioFQeH6awnHKJ4nhPMSpl0ETMAa4jHZGZwPt1+mqnBRfLHoO+W9EZE2dRYDAofGn/yii2UFK3818GZshzScPD8NghZnWF+0eJH6SotdVe7YUq1Y7FZg7KOxvJEetzWh2gNAY6ZRwf/yZrgKEFyAyudwhLAMZ/5VOhsfYxoBfI1A0GCxNuBy5q5MS6fDZEVki5tZ+zoTy2WiDAzTGIbYWumL4W13WU46Cp2y+Jav13MujwfvDrM+G68Btyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sfZCM7F8lYhz4G9t1lD8TEL+j0jCRjihKHR0uEksOt8=; b=ghs48qPpmTLwOWzy8t6uKUvvLvfz+xqnTgQnZKB8u/11ebNTTXlrvQRSNfMLgEXhatbpBeLyIdE3RlkchO+ioK2NUJaQitlWWD/+lg4MpCPT7aBJHQsrYw30cBvfIJXzLVRJujk41RzTWDDOJXL7ISgCvEG6mGrvpJFSkLJ+nltEhbKI2GtD5T407IBquoxK/yM3b6pfiLJsSxNxMHrXzyrZ60nYHEBRSF3psH9hPpNgGHpyr6jOpqcSBiYG6mSb4NlQa/8iuxFYoLdXF4yh1TmqYlUvuEP+ZBXtvh6rbw/kFtOIas901NGduxEgqn7aHN7+gAQqizWNjZFKBvt1BQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, philmd@oss.qualcomm.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH 1/3] hw/display/qxl: factor out qxl_guest_phys2virt() Date: Tue, 25 Aug 2026 20:20:49 +0300 Message-ID: <20260825172051.435372-2-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260825172051.435372-1-andrey.drobyshev@virtuozzo.com> References: <20260825172051.435372-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0001.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:357::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PA4PR08MB5902:EE_ X-MS-Office365-Filtering-Correlation-Id: 21e81b34-a6cf-4414-b31b-08df02cd3ae0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|52116014|1800799024|23010399003|38350700014|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: a/hZ+V1KK7t/CQfFRdc2o3CPROmnP4siDVWcl0poUfwqA1/q0X6Ex4JIOd42/RAMHzvydlrSTtJ9Iwpe3lEFDuDPn8M2Dux61Vc71ApfQdlEUHXkjEGsriGytZEWDsFIuaL03Qq7LAFACXPsnIBmjyznkRPzPeizAixHN9eOZUUy12kfkd7ajY7h5vjf0JOiCek3f482CM8hJpZW/YZlrXvGVMKst6TPLG3PLfSDOTwt888DM+QmxgCgeeKQrAYy/psQESyTuVedUu3LHMuqJU4V6dWijbNVszJAtHLU0y/Yl6CnN/AXJM1sD1fuRiNYPanZy80uWEA4aQAbnNarrfhhpx9rHrSvlIR7/k3PfJAFCnyYpPGiU3h7GpGjxsQhYnwknduSQdIkN/hZK4oazVCfpJlvj99WrS33cLKNl0VjQsEE7oOTfoUsVPyzS5ZKoWoHrRXZarT0lRpvo8WozqZ0Qa6KS+5oTcQqWSImiGc7uWpCio9rt14Nwe0C7Vs8Lz2f++jbMXNiph0amaQLMaOSp7Ynd/6g3bI2OsZwcdPAJ5hvMgNYSDzLtiYlhHt39UsUJ8tE/sVqRqXT0D/o2wJzw0fYSsKm6qfvUzN8GCuTCEjXTvejpEaenhG6qY1TJbhfPEt2G3ZBLkmvo2d4zz9nphBBHy/9YfZPDf501Tuec7sHTUYlqEe7/HFPYtJ58Qy71qb31KjYoD6+U7wFnw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(52116014)(1800799024)(23010399003)(38350700014)(10067099003)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?AgbDiaijCdtP1VQyt9TUA1SUB8lftT2e+cQ4NzycShFuOAhzQmR5qQ2vb0BK?= =?us-ascii?Q?+D94yG5IZYgP0ZtgRCux1MljB/67tkGrxzJvrlF63jiP1iLj4rxg6ds+r72N?= =?us-ascii?Q?THB427nU1qK9mFIHL5hfAEMJ8ubTE+NQIkLpyOBIfuNd75bzWiyA2uxVGRf3?= =?us-ascii?Q?X4jApYNyTePsM5q1JG1prYHlSpD0HTlWDlasW5wNKVZK6HU6W1kYKzVD1Wrd?= =?us-ascii?Q?mZuDq4c1v2bcJrYYoXCIfLfDsSmDH0aVcZRjTWtG2dV9+k1ygnz3l7OhASI6?= =?us-ascii?Q?0MzZwFp9euYTctdJf32/W/12mhXOB2u6ukxo5yPykPwHs5sfP0XFCMIvwFNq?= =?us-ascii?Q?/1Bl/6M7WNaaGE3qkth04HKktT5V6w0e7Kno2O/LlLA5bBO7eIuZPoJTMMB/?= =?us-ascii?Q?QMQCqcGqDm78IMW4nUSyS7o43mJtDm85bYFjPgrpTMaKZzAyoXH/jgD3Ib9z?= =?us-ascii?Q?8LZ30vYQeRZKXbxMSJRpmdswfUaQUvsuI15vJ051imUPs0JvWrzK0UpNRrCI?= =?us-ascii?Q?aQPWUGqE3nODyEzgK/vAnH3eS2c1eZMiOmreZXZQ5rEQP0qneYLtXdvZH39e?= =?us-ascii?Q?f8RGOxVr37D3ykhEbdAChuxNNq9P/xHHT+MLLDv2zJ26jK2J/QPNrOiO2Lg+?= =?us-ascii?Q?AA65iKNznOyezkOaG5r7mLB9+VRt0Y1YmRPmjC7e1bbBp489l7Vs/+VL/r8O?= =?us-ascii?Q?vpWJYco6Y3W5oGwRiTte2g6QPyCa/mDfOSsrIOfNfdIAz+ywW7yPGxo0VEWy?= =?us-ascii?Q?T2ARi0yWpfRWoa2WQpQCRp9IV/xwJ7aKLjkd+sLy0DuBbnyVH8gKkMPFNIr2?= =?us-ascii?Q?xXCel9v7WirFSixr1xPasmtKxUR34mKYzUUvHFSzPIffkDhaqTxFbYfr5fYY?= =?us-ascii?Q?EEXombJplA8I/aKYuWS0vtljIqd5W3ZqxX5snv8kXLKKhYztdh/BtasI7E8u?= =?us-ascii?Q?h7NKem1j8Qdsr/FQctM05tvG/CotBRr+ImauoQ0dKMj4p6msZMjZl694ofqT?= =?us-ascii?Q?tsqw16sizCFJCzEBugnWbi701dcifo7R3YQgogA/lRGxSeW+a1uWNCtR/Zq3?= =?us-ascii?Q?7ochQPHgzt7z21F6xhDUMMnJ/HCQ+JSywC+t4j6+ws30+F6WHeOl4ixqJ6EE?= =?us-ascii?Q?6patzlWJY3bSqrsjuMCFgyNu7gFE5iOJuc0N47Zfn60jAaDOXyXcBHT9tTkT?= =?us-ascii?Q?1IuQPbK1ElZPdhQAz+VSfhISD9+O7/HA82fSSF8YhIcMKN+AYVN8mF0fIw6F?= =?us-ascii?Q?lLlrfxuayXFH5V2JAoZc20nsICma9yIU18P0MedASx6K3Uz2KrAb2kcx6wHg?= =?us-ascii?Q?JzLfLSz3ancTtsxc8+pZHPtFC1jgHFF76w3EXa9iLup2FluCaTzDWoNnpjON?= =?us-ascii?Q?R84Dy43IQXM8V788hk8mtORlPPTFs1/hLBjQ6rpW1xrrlQJSyN6S7xCQAPwN?= =?us-ascii?Q?Mud5aQ9MJ6yMyGpiO7hCzSY3QMWLzhfCk7mRiqgJ/l+ZVYSWYKpeF/K0KJff?= =?us-ascii?Q?h35eWFMr8XnE3M6qRHPF2MIdbnxq2LR6lXMhr+sXX/FRXiQuiPS6qhmniEpK?= =?us-ascii?Q?QEIPe+1J57lKLSzypZn2UUKdrB5TN0euxYaIa80IpsyYJw5M39i0uuRvRMPm?= =?us-ascii?Q?t1bs7wXW9F7WhsPiAxlU+W0xqMbIUb4RH3CN1kwKOy8WrW3oOQWY+UChm3sp?= =?us-ascii?Q?ieBtVDFuCrtnMLy/WKcNmdlzs7UqA9+T6JEdmYW5fwMGgLyP1F4DvuwsULrA?= =?us-ascii?Q?QUx29PFLHX8xa5fzfTX4sGFyXHtW58M=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21e81b34-a6cf-4414-b31b-08df02cd3ae0 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 17:20:59.0570 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TczqnQpKd0gKP/F015CoL9bpUKMYSkU/omjtoxQ9D5Yhdwy57IiCpfcfnQR6wfgwTfa/NFtjmza29qpN457ginpSOK2v+li0TgIrnEEkcxQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB5902 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=2a01:111:f403:c20a::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=PA4PR04CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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 @virtuozzo.com) X-ZM-MESSAGEID: 1787678535042158500 Content-Type: text/plain; charset="utf-8" Split the GROUP_GUEST half of qxl_phys2virt() into the helper qxl_guest_phys2virt(). Also add a bool 'report_bug' param to the qxl_get_check_slot_offset() called from it: when it's false, a failing check just returns false without calling qxl_set_guest_bug(). All existing callers pass true, so there's no functional change. This is in preparation for a quiet caller that validates guest addresses which might be legitimately stale, when flagging a guest bug would be wrong. Signed-off-by: Andrey Drobyshev Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/display/qxl.c | 83 +++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/hw/display/qxl.c b/hw/display/qxl.c index b7d871b9ee3..be620b9c94d 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -1407,7 +1407,7 @@ static void qxl_reset_surfaces(PCIQXLDevice *d) /* can be also called from spice server thread context */ static bool qxl_get_check_slot_offset(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, uint32_t *s, uint64_t *o, - size_t size_requested) + size_t size_requested, bool report_b= ug) { uint64_t phys =3D le64_to_cpu(pqxl); uint32_t slot =3D (phys >> (64 - 8)) & 0xff; @@ -1415,42 +1415,55 @@ static bool qxl_get_check_slot_offset(PCIQXLDevice = *qxl, QXLPHYSICAL pqxl, uint64_t size_available; =20 if (slot >=3D NUM_MEMSLOTS) { - qxl_set_guest_bug(qxl, "slot too large %d >=3D %d", slot, - NUM_MEMSLOTS); + if (report_bug) { + qxl_set_guest_bug(qxl, "slot too large %d >=3D %d", slot, + NUM_MEMSLOTS); + } return false; } if (!qxl->guest_slots[slot].active) { - qxl_set_guest_bug(qxl, "inactive slot %d\n", slot); + if (report_bug) { + qxl_set_guest_bug(qxl, "inactive slot %d\n", slot); + } return false; } if (offset < qxl->guest_slots[slot].delta) { - qxl_set_guest_bug(qxl, - "slot %d offset %"PRIu64" < delta %"PRIu64"\n", - slot, offset, qxl->guest_slots[slot].delta); + if (report_bug) { + qxl_set_guest_bug(qxl, + "slot %d offset %"PRIu64" < delta %"PRIu64"\= n", + slot, offset, qxl->guest_slots[slot].delta); + } return false; } offset -=3D qxl->guest_slots[slot].delta; if (offset > qxl->guest_slots[slot].size) { - qxl_set_guest_bug(qxl, - "slot %d offset %"PRIu64" > size %"PRIu64"\n", - slot, offset, qxl->guest_slots[slot].size); + if (report_bug) { + qxl_set_guest_bug(qxl, + "slot %d offset %"PRIu64" > size %"PRIu64"\n= ", + slot, offset, qxl->guest_slots[slot].size); + } return false; } size_available =3D memory_region_size(qxl->guest_slots[slot].mr); if (qxl->guest_slots[slot].offset + offset >=3D size_available) { - qxl_set_guest_bug(qxl, - "slot %d offset %"PRIu64" > region size %"PRIu64= "\n", - slot, qxl->guest_slots[slot].offset + offset, - size_available); + if (report_bug) { + qxl_set_guest_bug(qxl, + "slot %d offset %"PRIu64" > region size %"PR= Iu64 + "\n", slot, + qxl->guest_slots[slot].offset + offset, + size_available); + } return false; } size_available -=3D qxl->guest_slots[slot].offset + offset; if (size_requested > size_available) { - qxl_set_guest_bug(qxl, - "slot %d offset %"PRIu64" size %zu: " - "overrun by %"PRIu64" bytes\n", - slot, offset, size_requested, - size_requested - size_available); + if (report_bug) { + qxl_set_guest_bug(qxl, + "slot %d offset %"PRIu64" size %zu: " + "overrun by %"PRIu64" bytes\n", + slot, offset, size_requested, + size_requested - size_available); + } return false; } =20 @@ -1460,25 +1473,31 @@ static bool qxl_get_check_slot_offset(PCIQXLDevice = *qxl, QXLPHYSICAL pqxl, } =20 /* can be also called from spice server thread context */ -void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id, - size_t size) +static void *qxl_guest_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, + size_t size, bool report_bug) { uint64_t offset; uint32_t slot; - void *ptr; + uint8_t *ptr; =20 + if (!qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset, size, + report_bug)) { + return NULL; + } + ptr =3D memory_region_get_ram_ptr(qxl->guest_slots[slot].mr); + ptr +=3D qxl->guest_slots[slot].offset; + ptr +=3D offset; + return ptr; +} + +void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id, + size_t size) +{ switch (group_id) { case MEMSLOT_GROUP_HOST: - offset =3D le64_to_cpu(pqxl) & 0xffffffffffff; - return (void *)(intptr_t)offset; + return (void *)(intptr_t)(le64_to_cpu(pqxl) & 0xffffffffffff); case MEMSLOT_GROUP_GUEST: - if (!qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset, size)) { - return NULL; - } - ptr =3D memory_region_get_ram_ptr(qxl->guest_slots[slot].mr); - ptr +=3D qxl->guest_slots[slot].offset; - ptr +=3D offset; - return ptr; + return qxl_guest_phys2virt(qxl, pqxl, size, true); } return NULL; } @@ -1942,7 +1961,7 @@ static void qxl_dirty_one_surface(PCIQXLDevice *qxl, = QXLPHYSICAL pqxl, bool rc; =20 size =3D (uint64_t)height * abs(stride); - rc =3D qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset, size); + rc =3D qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset, size, true= ); assert(rc =3D=3D true); trace_qxl_surfaces_dirty(qxl->id, offset, size); qxl_set_dirty(qxl->guest_slots[slot].mr, --=20 2.47.1 From nobody Sat Sep 26 21:37:18 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1787678542; cv=pass; d=zohomail.com; s=zohoarc; b=lOX2ihJCZ80TSPC5qRkSZiG1n2BtJzZcbMLN7IU7qkEAhQkQyOsdTypoxydESJIq7z2+jv1USQaoeTSyM56VM7ovMSObupNYfAvZI8iYFAy1qxXymYk5J0yUB/WN8rpYGvrHwnsRm/JphluRXYkQXFekEKqxvjqmYolW33W4e7s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787678542; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WlArGzS65w65k3ejPuGa8vJ3QekM/Pu+4o7teo7qfdA=; b=ETCLKHdiotX1JYtlMom2dePkfD0yavJPhJVqCvs4cz6pWP8o4+rliZAn+mwixkDZBrKfAtHfUKWp41nPzU2rL5FP/FrKmsIe30zVsvH1kUBTXUTR+pua0IJdBgwSwKEraiDt5WrLNXdIHC5dELyP6Ma+ewsv0DIxp0XRc+Mtkig= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178767854238322.778980167891973; Tue, 25 Aug 2026 10:22:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyuqC-0005gW-1O; Tue, 25 Aug 2026 13:21:40 -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 1wyuq8-0005gC-78 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:21:36 -0400 Received: from mail-francecentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20a::7] helo=PA4PR04CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyuq6-00058O-Kg for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:21:35 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PA4PR08MB5902.eurprd08.prod.outlook.com (2603:10a6:102:e0::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.6; Tue, 25 Aug 2026 17:20:59 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0339.012; Tue, 25 Aug 2026 17:20:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YWpB7LrQJb+otXAenI5t2nCKMa5YpQt65/I7ITNDAyv+DLvrZd/f5WQvjwSzW7hhNGDKXJ2vMVrytSF+TK/MRr5LAPZCogOWxqfKthYzb9jOc767wMEdJA+JLtlaKb3y1Smi2KNKsioF+vk/XKuCiJ5KMAAhyNGaUcltyQiibaAcmFXOTFFHxgjY30LjMAH0eM44z8qb901OK7gqJEK5OeJ5hjzzCnptFwrAXVe0JRoONBiLhKgfhc0pEpizLFmN9qXymps5Ri886tahgKTfBfDqsIanr8RUA9n+R9HARD2+GWf5oucoOHwQmgjn1dm+WTfyH49phDiQyXQfXB1/Yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WlArGzS65w65k3ejPuGa8vJ3QekM/Pu+4o7teo7qfdA=; b=l81i2ys19nl/JIjvaLkBY7L+NPJLtZaOV0SmOc74T6BOcKYAUu7afPTxyh7WE5txzQH2O4dPjgkqKXxu5XLCJQrS5Lw/OkPW4qHpssdIxAZEwLIw3RHOFfP6hNqyRGfNzVlmdEGCBkyE2zIkxtt/8Wa0Q3bCZYcvzMVGtHE9beK8vOXFlcOXeNY4t8sv3QcXArn40LtfALa/vVx51ENFJot0FtuswQ4Ednts7AOZkYXV/ikBSVJpTnw/biQRzA7oLqVv3MpQqVs2wAGVb8PIBrFxF109SL5OeSz+jofTDr+A3G506yoLqeitFRZeI+yGx3zbIbmSQtmHsd6iUrtdYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WlArGzS65w65k3ejPuGa8vJ3QekM/Pu+4o7teo7qfdA=; b=cs995QVzCqYOBNnLHapKU4re13Qp357C8PE+y9hcULQ1rr9DZ7ox7uXl288l7WKlbB1XRTP9hEOUJs3B180kN5YogwzJjCCQMibesI3YUqBQlUFNwyjI5pfDetKUG3iyS8D9zuY0UHirqgTpnTFUTCgFrWD8r8eaOu49FzgDZaP/npRWWcf2gBNE69YEImor8Wa1xNtSvh72Zvz9lJOUTqFEXUnpzAikDauzJhI2zEI0hFQazdukOe43JAEfg/fFRJxARSxxUARCguIfdQXfCXA6BpsSKB+zCvE9F2udwt5si667lmJHqJhJtupLHTLi+0cmLmDjObPb1XvTA1wQfQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, philmd@oss.qualcomm.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH 2/3] hw/display/qxl: validate replayed commands in qxl_post_load Date: Tue, 25 Aug 2026 20:20:50 +0300 Message-ID: <20260825172051.435372-3-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260825172051.435372-1-andrey.drobyshev@virtuozzo.com> References: <20260825172051.435372-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0001.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:357::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PA4PR08MB5902:EE_ X-MS-Office365-Filtering-Correlation-Id: a93cdcff-9fa0-47ae-98c6-08df02cd3b27 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|52116014|1800799024|23010399003|38350700014|3023799007|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 0d+ZHPsBC+n7GxN6rjh9bkOP1KMNWhg4NOiFbgkx8n6CJJV4x6pSG6R69ESw7wjN6GO5BjbJej++hakhBEWQiBKyrVTFXeWv7sdLxKQ9jLrtVhJi+irNH6EQcU6V0Yh65bk5bJw+DPMgh6fDDRbFTNAgJsp+VFpy5fqC+/HWh72ZMgwv4LrMej1UB1Dz2D8uwuBXLymj5BIh+Nssb8BCIce64SirUyTMk0UNHh8Jh1AEIZk52aUog6eQxaRJswfvWUbIcgSS7+8cnpekxevWTHud7EYTdFIpgi+VExcuIDKOU8gJzjAwqqO3trZBUkQLCmCiQsI1dXcqchWPw0NNQ50bgGB1noefrh9eHnGfliCgHtg3ulzas79axMjW+jihBMKut1mrikH7lk6X/LGGhrEbMa5fYeSxzk/N0uOSvxEhjNXdXVGM4Twh4/Z8T6q6BSk5+VHitLAomTolJQZt2GFjWBfX53QkBHbBiJQ3xGlIiky8FkXtKJr30KikypvaTxbWp1D/Jkuxa3/VWsSkSBWfkj7OS6ERZvdFdOkJUz3WRkRsbwU8XOmWM9mbx3nmDgYGO8DumFxjRsumvwoxYKueWkRJv4C615HqWdVU0cdNspMy7jq4Z1UPA9atCh2QyMhNdEWYXBNXZ+QrKf9pl358Er0tReti1uT1l/3Xew/+0DcJMZFde1BXLfoP9bR/+Dvq2bIQu7jdpdnvJLH4eCSh0GQBtWJGdMotgJHzGFE= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(52116014)(1800799024)(23010399003)(38350700014)(3023799007)(10067099003)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JbybY4AknGViSzvLYl5AkwARUH7yWhlv9ReROHgc8Id448e0c8Vepfi5tmkT?= =?us-ascii?Q?pyqg4ChGwUp0/U9bj5xvzfMeMxee4CCubbl+cIOGoGHJ4KtGFzsdAprsYIpn?= =?us-ascii?Q?rholQgYYwd6XXoxMleD0OyVsjs11hYALHl8G7PJVD37f2++gIkLNCYV3zFyx?= =?us-ascii?Q?w4db+ShF2QPrikpG1Pdjay4axZJNLCTaIMC6sL3QO/eYJrfOyMItEHLUVJiz?= =?us-ascii?Q?NVThnWnZrad3AU377oSxo/kaMK4ikupqMDm9adgnd15oI9eIPB2EiioY7EAG?= =?us-ascii?Q?sIcdAl+MItYJKkOPx+ptKphbZ3GKi5lFzfw3cVhhk3haN2RTiCnnoE6vQ+pr?= =?us-ascii?Q?VBTyzV36JKHg0oqf84bXyszZSdJrc0huU1j2Sk+l+gwZBaVtjn6GMA5JdMVr?= =?us-ascii?Q?KDsBYmvahvIfFANac6Q3cfV7iwy32+zSH83HaBdgfgOwDp9NOrNzfJ2fEWcf?= =?us-ascii?Q?aUCOti2PVH7llz/UYJTZFx78g+Arw8GM8pqFBKnleuwbdXp9+6w74GmYX4Rn?= =?us-ascii?Q?2Dhb1ff9rZwL2Sy8D2J2F1WQ5enUOuiN6S/xtsJ/uM3XxO3SGIS87YLjMhhu?= =?us-ascii?Q?OBPSB9XPRG0t7Jv8sb/P5HkjVegBJMjkK6ijYerg3ONR/7wxzByBwnmZnErx?= =?us-ascii?Q?nI4W9nQr/r51HaEJoPTfwB7i91pR1deD3idoXSd8EsAQGoeKpzt+ZiVhj17M?= =?us-ascii?Q?7/4rc1xlLG1Itp4dotoE6fSraFw0e35qfdNUy3Qclj8YZtXQwWKFyxxQsgf8?= =?us-ascii?Q?S+xq/HK6g5MPEN69wN7JTRwp5gdhKp3QLHBZ499lnNm+pmShFaCVVxIZ1fnG?= =?us-ascii?Q?nFRYQX/rw8IPqSCmnLlwEXVw8ZCsZphwQzbjLmYXJackTVN7evsDul3tOJBZ?= =?us-ascii?Q?nWenh7MwyTWwSFeB6RgpxbA97OSwijw2eK+m9zsVXYoQtY1Bfa1HleNAWmXB?= =?us-ascii?Q?RJO/Y9gY/MJrC8UlSBbE7THo1DpTWLCRV/fJM6Z4tPT3MSpUtVH3RJm4xIZb?= =?us-ascii?Q?IfcAvTxSHaa0HzbEU9QDJ3biDBkjyRqowcq5DvTnKO5DmcoHn/J/foZQUMpQ?= =?us-ascii?Q?nhOgPE1xrr0CUkDIzWbJFYjFeQWi87En1+c1aAkEJB7MYUDhnW+y/ACdthlT?= =?us-ascii?Q?y4JCWAJY6a9Ujnc9EghfzsySHkVauMCZ94uxIgTSjxAajAiylacGIHaqkDUh?= =?us-ascii?Q?8U1kTzK0rx01hvACvjCc4yD/zcc4uMpZVgw8Ta8lggJ+JOfhjnF3nE+ZlPWX?= =?us-ascii?Q?4aplWJqHPu+8xX9vJI2ic+IWdeeiPuYlBpk3oL5Bnv60b3MB7Gl4yS7u85rt?= =?us-ascii?Q?AG0WhgX8LLGhySoZVqv78VMxagZpmkpdeM+mtrNQM//QqMJ1xvFj3Qoi2SjE?= =?us-ascii?Q?IQGkv/Y86NLYg4vZtEepk35jHp0XurCM8xD/dczyMIJ866PfwH3jW3lw2apj?= =?us-ascii?Q?owmn+JEkNRqb8pVGf40/YAFECcvPLSijD6CzEoj8T5XxodFnT0WDh+VliTNS?= =?us-ascii?Q?5YXVhVHyJyPWotA6CfTXyZlFE/YIIYnZrcgDxitL4mr8ToQjMngMSrOo4vZE?= =?us-ascii?Q?+YQBIJKiE01mC1sL7rt4bPiTPxX7vUIlZBHrmrMqHthLdcV6XJUkWaiImLQ0?= =?us-ascii?Q?BHoaE1HekZxE7Q7c7ESnXGXqJ14hybX1Rug9iXtp5xe8l2QSkN0qUDnKC8i+?= =?us-ascii?Q?eKQuVSAUblDDaY0KEvouBFiNpxEU4EgmdEkPXZwU5rgRzyOSP0CDp5QiHZjB?= =?us-ascii?Q?sRSvw3l5UWIi+EhUXRCwKXnqgolr4nM=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a93cdcff-9fa0-47ae-98c6-08df02cd3b27 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 17:20:59.5614 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Yg56s/0yPTOHunlF83UO2SCs20cgqKCQZPMrOUha2LHeGSrbsWmKDhYgzqpNgwHHbyFp6w+yzmH8C9q7m5grKRHzaW3cJ0fDCFDcbnCC7Hg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB5902 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=2a01:111:f403:c20a::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=PA4PR04CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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 @virtuozzo.com) X-ZM-MESSAGEID: 1787678544538158500 Content-Type: text/plain; charset="utf-8" On incoming migration qxl_post_load() replays the tracked cursor and surface commands by handing their guest addresses straight to spice, without revalidating them. Those addresses were checked when the guest submitted them, but the guest may have freed or reused that memory before migration, so qxl's tracked pointer can be stale. spice-server then re-parses the command from that memory and, for a stale cursor, reads a garbage shape pointer -- aborting the target in memslot_get_virt() (again, spice-server function) and failing the migration. Validate each replayed command with qxl_guest_phys2virt(report_bug=3Dfalse) before adding it to the replay list, and for a cursor also validate the nested shape pointer. Commands that no longer resolve are skipped rather than replayed. report_bug is false so a stale pointer is not mistaken for a live guest error, which would needlessly disable a healthy guest's display. Signed-off-by: Andrey Drobyshev Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/display/qxl.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/hw/display/qxl.c b/hw/display/qxl.c index be620b9c94d..b9b19849738 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -2329,6 +2329,37 @@ static void qxl_create_memslots(PCIQXLDevice *d) } } =20 +/* + * Validate a command tracked for loadvm replay before handing its guest + * address to spice-server. + */ +static bool qxl_loadvm_cmd_valid(PCIQXLDevice *d, QXLPHYSICAL data, + uint32_t type) +{ + switch (type) { + case QXL_CMD_SURFACE: + return qxl_guest_phys2virt(d, data, + sizeof(QXLSurfaceCmd), false) !=3D NULL; + + case QXL_CMD_CURSOR: { + QXLCursorCmd *cmd =3D qxl_guest_phys2virt(d, data, sizeof(QXLCurso= rCmd), + false); + + if (!cmd) { + return false; + } + if (le32_to_cpu(cmd->type) =3D=3D QXL_CURSOR_SET) { + return qxl_guest_phys2virt(d, le64_to_cpu(cmd->u.set.shape), + sizeof(QXLCursor), false) !=3D NULL; + } + return true; + } + + default: + g_assert_not_reached(); + } +} + static int qxl_post_load(void *opaque, int version) { PCIQXLDevice* d =3D opaque; @@ -2367,12 +2398,17 @@ static int qxl_post_load(void *opaque, int version) if (d->guest_surfaces.cmds[in] =3D=3D 0) { continue; } + if (!qxl_loadvm_cmd_valid(d, d->guest_surfaces.cmds[in], + QXL_CMD_SURFACE)) { + continue; + } cmds[out].cmd.data =3D d->guest_surfaces.cmds[in]; cmds[out].cmd.type =3D QXL_CMD_SURFACE; cmds[out].group_id =3D MEMSLOT_GROUP_GUEST; out++; } - if (d->guest_cursor) { + if (d->guest_cursor && + qxl_loadvm_cmd_valid(d, d->guest_cursor, QXL_CMD_CURSOR)) { cmds[out].cmd.data =3D d->guest_cursor; cmds[out].cmd.type =3D QXL_CMD_CURSOR; cmds[out].group_id =3D MEMSLOT_GROUP_GUEST; --=20 2.47.1 From nobody Sat Sep 26 21:37:18 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1787678534; cv=pass; d=zohomail.com; s=zohoarc; b=U0oaobA+C0/RuYI3h6XGlGw/TtIrLDPvAbC6+Q5tVHkvPJM88Q6DtlCyU4vTRlURZA/mFWjvJxswDivrtvTDOoJezdxzNV0NIThRh8OqVkqwsZjxRL+tvn3sdOVSnyhRoHfc21hycUL03FaF02Y343vPzV0YWoPPyIq6xZ+1OCQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787678534; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=m+609TI1T8feS74l8FQNFGmiRmggBgeWxZHDYMtFl4c=; b=MAGPPktF5FoeCzK+v8WUDpS9QKVkDX66nlKRfprpoj5AwTQcnPlFbS9oQGJx5gE+t5Xt8asZFj+0HSaZXT7uRLh0EZKPhR0B/otCMIfdhk9n/xBfoMt78Xo/Tm5SPTvkYHhvU5cGicTgyiXPyyfiFD5kqbVj1w7Xx9RkLVvqS5o= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787678534162517.2963440810918; Tue, 25 Aug 2026 10:22:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyuqE-0005gz-7L; Tue, 25 Aug 2026 13:21:42 -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 1wyuqC-0005gp-S9 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:21:40 -0400 Received: from mail-francecentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20a::7] helo=PA4PR04CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyuqA-00058O-Ku for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:21:40 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PA4PR08MB5902.eurprd08.prod.outlook.com (2603:10a6:102:e0::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.6; Tue, 25 Aug 2026 17:21:00 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0339.012; Tue, 25 Aug 2026 17:21:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OY6U8MwOb9wrCDj4gfAn48GXlpUlyoVU5NV/nRycozyJcbivMmrrx5UQWygIrYbKi7Go3UQvLhOxW0hsuzVGsG+rTRV3shqbRzhXsBWeRlFyG45MR0YTtkLwbD2qpWnn28RKhdpDrgs8oYM2jlKpX5jMnhvYxoasq1+z4zqsByvBwxa8aqJ2+34/z/iUJxuKnEiXDBpY/xGWDoD5O6NIJ3DzvWVPRhtXXt8xvoZUpTn7poq3RWDBBXyzkDlsM4z9JhKi6uYNL08azc0Yk29hGvN4QzRM02NM4mZdF5UQA1XsGbM3IHQrM0+H8GF6mw2lhgpyxJAtnUgOvPA8qv+NRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=m+609TI1T8feS74l8FQNFGmiRmggBgeWxZHDYMtFl4c=; b=F8X8hm4762J8uToUVwQ7hh3J85FhAlXtVaj93A9YLHCgIvcACq3ILLITWSxeWmZcnLg6e1JAGimhK0ZI4/HEcT4B2kwvz6DRf2+UQh8R5D3aFpT5dbtcdslqP0+sTlryHCwoV7FLEDWL88nPzP+gaOQyBInINn/d7oRAEWjkZUjPVASi4L1eze8fbpMPiuAVc2fLU+b4hAQADOXIYojiv5rgi4yBccyXHHJ1ABioC7YYqYViGS/ISmQHba/jYOwQIVvccf2KICAhDvu3VVh76gtNu3OG7lfl1+NWodUt6Ntu6EhWEXcPfW+jaCQq9s1V9PeFwYxhjJJ+eV9uCzctzg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m+609TI1T8feS74l8FQNFGmiRmggBgeWxZHDYMtFl4c=; b=rK0rKjNB9GwVwkPtlkV8TRQQqk6tDGECqMlQw6ZPBHirXj2xrumtOe6OE4Vbydw3ioHvxNsDtatOgsfaXM1r2IoisUSteFev7tYJDhYkbHbye5TAXAEZxF1Y8Lpbi81jGHgNoT9RcrGB7zkq3wxf8Li+dWkXfH2Cwv3J5UTFv+7cvGxEDiD4bFOtV3k22mZM0DWGrTCLlwgh3mi8meDIeQQtA3NsyElKuEfB1UH4QlsUp91n8ADU/9gpDfeivKK3zm40C8onlTeCr2+/PdFKEqfp00cTabs72eQbhn0UJ0bwPGOQmCjsWl2nGJFZMefMcddSviKpQQlMpllVQNTqyw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, philmd@oss.qualcomm.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH 3/3] hw/display/qxl: trace skipped stale loadvm commands Date: Tue, 25 Aug 2026 20:20:51 +0300 Message-ID: <20260825172051.435372-4-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260825172051.435372-1-andrey.drobyshev@virtuozzo.com> References: <20260825172051.435372-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0001.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:357::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PA4PR08MB5902:EE_ X-MS-Office365-Filtering-Correlation-Id: 078e00fe-2bd4-4f70-a475-08df02cd3b72 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|52116014|1800799024|23010399003|38350700014|6133799003|3023799007|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: +0cbooYEScyaaKWmp/c8EDGmcrGSMs90dFln3hFwVc+W3Y+QZ7DzWAs3V8yyY0hwPfUIw4ua9zccWkqPyb4RlVhOj7zAyt0+YDKQfOpFLj9u2VYGpp77hHiubs4LywoSyyInl6XWIuB4Uz+8gLMQIcMtLUVgqAvNcnnHmhCgQajS+Y4X0mHvh/Cuf+wJdgo/xGITxjjzxPQX6ItpVQ0lNVwhb6m8yQfTV6UfoP6hLM1roEqrGIctqj6Ds8+l8H3EhbPZ1Z5/D6qHhs7qsbqaQaE9PE9nCb4XmptCoODK+z6jRY480FkFNbxYNDwZzu67n2gv2mrA7YRWnWxJG2+V4AJma70C6b7wmwYQ+CAUMH1DsFpHz069IWDTr+6LAY+iCwU9JNTHAysyhh1j50w4xfgEC3LytrsCY5P2kzqQg0Ekp/yP8Xy12F+IXXqlOp4r70lv2D+85DLotCzHBvpyB6FVcdErt1oNepoPq9iRyIFpqp47R9uLIh46G7MGLFy5sTQr39gIrmVeuIhhk9ebohMnYQqzucCaD7ZTXYROaCvMTnQWFjbTUAyuMMH7wOpnuYMUzpu2wDLV9UA/22BZKOb+kQtQrGgUis6ESmXk3ewdlnPAAhgyHvTHHQjJETQIuShW/jNouVo9MnA6PdRrg+o8bIjlnifwI/ATlvis1uo5ZPKzypZPygZZ9XZBGlIBX7YaXReXfVCZogQrcNh+EW81Sqf54xuZZ0Sv7V3eyjM= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(52116014)(1800799024)(23010399003)(38350700014)(6133799003)(3023799007)(10067099003)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bWsCNK+qcNsvpFKgpS1JgT32ClOraDHye0L8HFHUO2rmkqtr+4K3XlDyBwrg?= =?us-ascii?Q?3QG3R32LHW+SEI80ZqkuFWbqSG09UG+mHrAd/2PxdzGv4+MbLjGWmxbexZnW?= =?us-ascii?Q?bE3KZWJf0Yka1nUgn2ECMGZKzgBOgFAa4G+42QdELB7Crq5vw77ic8P9lM5u?= =?us-ascii?Q?xqbP2+fNurfaATOIeVFdN1wOJXaqd8iAJccTz/iNMZzmiTpvaw30H+hbvfBN?= =?us-ascii?Q?QkhI+B03L0iKVHTTwwG+GzFd4O5bKELUKwEJBCzyWJbccbBihh6cKAwjFQMG?= =?us-ascii?Q?2ngAWk6sgpyS01gdj/XYwAJB/I/qK0gTpMkOKx+VZ8wUglk08D4mjdNNUxfq?= =?us-ascii?Q?O/hfMSgEZcS9ISsFAKKay3phKO/FYK4PNn8ab/P/C5ttpyV8MVAc6Y+LTbD/?= =?us-ascii?Q?ji5OXjNcImlhjlIaTm+vxtNk/LRjbluaUOkz8g5fVRx1ymgLlnyND0c6cJTV?= =?us-ascii?Q?TQWsronzb7KsQpVvWZuIqv5Nj6WJEsttPdxMSZo8Srl4B4UAZLWRKif1F2ma?= =?us-ascii?Q?zoqRWYcVvI/R5HCZsKkpgQu2Oa9+92x9mKUQfd0zh5DdbC56F7yAlJVlFqON?= =?us-ascii?Q?RwEWdgcoPixUKETiY1dGZSeBZNibHGgdV5Vjgwx2TPtsQS4Ef2vKJUEU8PSB?= =?us-ascii?Q?E4VWtZsXZbi+BHBDXcZVEHBPYtVivuvmFaupTfC1gw2htAlJSxKd745wYB4d?= =?us-ascii?Q?Mo8ltjcbHtoL+d53y9ehbd+vvI0rUwf7AU2Gu4gPyZssj2NzbRew28ukn6cW?= =?us-ascii?Q?VCxvsgzb946x50/RM2nLBMmihwDYA4RZaI+G8vCiHnDdATpu7lduyhj5NGch?= =?us-ascii?Q?b2rN7Gt3yzDomqcOXnmA+WZAzMloKsSw5tUUFUyOF9iOFpGm/crJH8G/R+rQ?= =?us-ascii?Q?9kGb3i/ukwMmwakW7DUFAkMUetyh1uA16K++sd4wZMD8lnTuR+aq9bCrR5Qy?= =?us-ascii?Q?WUHvncpAHS9v0Dkaf2PWelVmnhFoE6f5NOi4WwM87Bh8HDmKyNzi0QCHjzgR?= =?us-ascii?Q?bDZDsB/auvchzxmmJQu4yOTtLioDDeyrzF7k8oCjms9LPgixyoivClOHbgQw?= =?us-ascii?Q?sq4wxDxMFtSLnRHuXRaudRu76wc6cc2NkpJIUr9u0Qq5r0mtKYZCzqfC8NCp?= =?us-ascii?Q?9Wb9pA6DRgrzXsxha7I1zbX095ZXRGEWcMFn2grmT3d2hK1n2vepBDY5HQfh?= =?us-ascii?Q?kuGOURsMmCOJWlccmz0/J8WVmoJxFgZoxdljac+58HOQs0GpjGAh/lYRkvfL?= =?us-ascii?Q?TvvQ6SWN48IV4PRO6JDeVZg0J6BWR5+B/xqu3j/cItrciKhEzgGOgQLZHT15?= =?us-ascii?Q?ZLzzQyXkbgPgiJrbaloQBMwUe7ozEbDS7yCbAGM+utHRJCBwLa85sNh/KtWM?= =?us-ascii?Q?4cZAlRlUrFSWMM+8zIOk3Wab2Y/77nsb+hXRbyr3vFPWBwE9XYe2hB4aBMug?= =?us-ascii?Q?l6Hy5gyYJ2cOikaWSKqwcmP0VqpIBfalPT3oZCA7p5r8+TdI7rVlXLQ4wEFu?= =?us-ascii?Q?ebNKDTdcyWv/u+tdiPfpm8qqK7n7qmqUs9cPNh2SWCCDAed04VpgUMnhj9FM?= =?us-ascii?Q?J0A+NLIF9rWCh4B6qqas8A19Ablgesd5MBVv+XYSQHJwLhpKBVfXkJJFM3bh?= =?us-ascii?Q?c7VKvuu+VQN6gWBOSM2EXsxgPlrgMno5CW8EPsiiqaAZ74YIdGW2Ow1u4wYA?= =?us-ascii?Q?dZXz784lRsYuPJBY2+KQuTNs+yQez4PkXLYAT59OF1kAhoknc8DpNSjR/CNk?= =?us-ascii?Q?RMe0z/f7e2vRcJIEgbS9Lt+MUg1wGvY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 078e00fe-2bd4-4f70-a475-08df02cd3b72 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 17:20:59.9904 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QpuC2IEUTfo7Lvf1XK4dIeAsLHWryCgm9OxZbAhZwMByMxO/6u9J3gHZ0s6I1lt6+yVf5HuLuDRQ5clfnILqhGm9Jf/EiC6Y+wPwATpP6/4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB5902 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=2a01:111:f403:c20a::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=PA4PR04CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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 @virtuozzo.com) X-ZM-MESSAGEID: 1787678536208158500 Content-Type: text/plain; charset="utf-8" Emit a trace event when qxl_post_load() drops a cursor or surface command whose guest address no longer resolves, so a migration that lands on a stale tracked pointer is visible instead of silent. Signed-off-by: Andrey Drobyshev Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/display/qxl.c | 17 +++++++++++------ hw/display/trace-events | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/hw/display/qxl.c b/hw/display/qxl.c index b9b19849738..9e7bc5c668f 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -2400,6 +2400,8 @@ static int qxl_post_load(void *opaque, int version) } if (!qxl_loadvm_cmd_valid(d, d->guest_surfaces.cmds[in], QXL_CMD_SURFACE)) { + trace_qxl_post_load_stale_cmd(d->id, "surface", + d->guest_surfaces.cmds[in]); continue; } cmds[out].cmd.data =3D d->guest_surfaces.cmds[in]; @@ -2407,12 +2409,15 @@ static int qxl_post_load(void *opaque, int version) cmds[out].group_id =3D MEMSLOT_GROUP_GUEST; out++; } - if (d->guest_cursor && - qxl_loadvm_cmd_valid(d, d->guest_cursor, QXL_CMD_CURSOR)) { - cmds[out].cmd.data =3D d->guest_cursor; - cmds[out].cmd.type =3D QXL_CMD_CURSOR; - cmds[out].group_id =3D MEMSLOT_GROUP_GUEST; - out++; + if (d->guest_cursor) { + if (qxl_loadvm_cmd_valid(d, d->guest_cursor, QXL_CMD_CURSOR)) { + cmds[out].cmd.data =3D d->guest_cursor; + cmds[out].cmd.type =3D QXL_CMD_CURSOR; + cmds[out].group_id =3D MEMSLOT_GROUP_GUEST; + out++; + } else { + trace_qxl_post_load_stale_cmd(d->id, "cursor", d->guest_cu= rsor); + } } qxl_spice_loadvm_commands(d, cmds, out); g_free(cmds); diff --git a/hw/display/trace-events b/hw/display/trace-events index 4bfc457fbac..c5e7e42af23 100644 --- a/hw/display/trace-events +++ b/hw/display/trace-events @@ -82,6 +82,7 @@ qxl_io_unexpected_vga_mode(int qid, uint64_t addr, uint64= _t val, const char *des qxl_io_write(int qid, const char *mode, uint64_t addr, const char *aname, = uint64_t val, unsigned size, int async) "%d %s addr=3D%"PRIu64 " (%s) val= =3D%"PRIu64" size=3D%u async=3D%d" qxl_memslot_add_guest(int qid, uint32_t slot_id, uint64_t guest_start, uin= t64_t guest_end) "%d %u: guest phys 0x%"PRIx64 " - 0x%" PRIx64 qxl_post_load(int qid, const char *mode) "%d %s" +qxl_post_load_stale_cmd(int qid, const char *kind, uint64_t data) "%d skip= stale %s cmd 0x%"PRIx64 qxl_pre_load(int qid) "%d" qxl_pre_save(int qid) "%d" qxl_reset_surfaces(int qid) "%d" --=20 2.47.1