From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021102.outbound.protection.outlook.com [52.101.65.102]) by lore.virtuozzo.com (Postfix) with ESMTPS id BDFA180C27 for ; Fri, 23 Oct 2026 16:54:29 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vLgxR8VpuXdge0wlXA/noirIelO3d8VAAmRv3eKLH6OMi3bQaqiKbvs0MoaYSEApMoEI+f8xqfTBd9Q/D55SH2e9gMPWvrW6Nqtexk5HG9RrTHOqt/uajUjXvlRGBn38vfZ3eFrMa3WYXD4vzbH2iO5kWYT22bJDXx4rOOgx8JtRo3ILIbprCGqn588J0zDoAG/34EGarolGvZqqP7wXYJsoplCi1aQv1K28EM6qgO0dJUtZUUfxygI470AYyxK3hMhoDYPXzsGU/ZfAGRlM4rCRVXpAZWbBjz1+VBoJG01URsdwEVsHmnHPdgLXHvFGUhfzVl+7zB+EadNpd2nDpA== 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=/5PS4N919LoNL9oeyLCSQ5WQMEn+hS+8x8Y4uoYLeHc=; b=kFsOpOtPwpXzjwtPewFa6H5cQ/2U/wbiNLeMTYRd37djcH3zKxDTFyg8CQ1zKM39NYjckMDkFhvnUU5+IR1mqBgSEHFL1muB8RSmJp5khtnUlu5ILMKbwPS4X8/rsUXu1dxTnyeKpK24h2qlWDm8BEpRS0cr66Mam0T07bX6Rv00r3eWdgVVk+lHvF17dNKo6sCgpX7Jq6E+W7a6HveV2duTvHiFit9cBvgm272dCwLcUrnsd4+TeMHTlOHr08zUqPufNZWyagWqIVyxqvzGv6XfLD6RRJ+qg7afMkKSGXYvrUtbGE1OD25eq7hJ+2y55KIichCXew/7/YN5fyiKgQ== 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=/5PS4N919LoNL9oeyLCSQ5WQMEn+hS+8x8Y4uoYLeHc=; b=tBtderThUQsNbBwrue0ViADMnT2yyIxDNQ2+FLL+c3xT8vScSO+ByyVUrsCOSj9Ad41+ieUDPdS/4ukNOuGTKtuzc5IyM0k6tjLxrtJC83VYoiycDrBP67xHVMSiVwinyftuhPW6P/WDSX4x5CrLHcZdIEWT/QVWlTGfp7CKYixknNqFEVTwaRs5/SwRtYTqBXEIOHu2aM4+zndje1vvs5C1oCW/COiNT6cljlSGu7nbOmza0C32Wiz4BCSSp7DU1EwWbIid0ygmj+KfMfnbiJZ1aIaxzPqUQmvU1nNfoRhbrW/uvr5gmpXYp5A9Gz+k7ICYEat1GoCLxzOSeSaxuw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DU2PR08MB10185.eurprd08.prod.outlook.com (2603:10a6:10:49e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.15; Fri, 23 Oct 2026 16:54:27 +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.0546.017; Fri, 23 Oct 2026 16:54:26 +0000 From: Andrey Drobyshev Date: Fri, 23 Oct 2026 19:53:41 +0300 Subject: [PATCH QEMU HCI-8.1 v5 04/36] migration/cpr-exec: require a file or exec migration URI Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261023-vfio_v1-v5-4-ba0bf3c6d122@virtuozzo.com> References: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> In-Reply-To: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0902CA0027.eurprd09.prod.outlook.com (2603:10a6:802:1::16) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DU2PR08MB10185:EE_ X-MS-Office365-Filtering-Correlation-Id: 44d782b0-d633-4be6-f638-08df31264694 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|366016|1800799024|23010399003|261021123027099003|261009223027099003|56012099006|261022105027099003|38350700014|5023799004|10067099003|22082099003|18092099006|18002099003|261021121427099003|5113699003; X-Microsoft-Antispam-Message-Info: H7zjKecjTCnfrvAnzXz6iDgI3eP5AhP6G4GF6MTiuG/cGmBZlheYCWnzYp47EZfbmE2ph63MfvTxxhKy+UxDLg8nnDhWRd1TnLrV9Zoo84YeHWOL6EB4b9/QbMyAqLwouppubMqO0eQlBGancUxbtSj3CFbIX4Ix6cJmc24VtzmuHCuCSAcAQLMjqvDBjVysgtD/i1JhRa8HpZ9Tc8BlmY/fVl0IISCPdvgCiucFLwVeNGBvW5epoZZRjKxAqggXwYCRkDwmcIUvBOn9QLvnW7N+O/3trwicsnww7deCSbcbpWU85PE11PyV/FiKU91sCa7/QLw3985H7lYaPIk+N9JDTpyJwhH5eHKXYgcWdtGO7a+QNNFZx8t+pb3BJqLO7vK4dkNFvuMmdiG9IEetet3ktn3B5OYYdZoVKvv6D8TTTXdPg9gOfv2cLqF5d1X0J/rchVh1R0AhyWqyfzp7fzgKuQpumq4wrOVjS8e1USpIBg5ooInb57vRSN2ew03rufQtfIWFNxUFZWAYdr3VCr3e6b+ZpzTWmKDNbTrTCH8OCbM40nX7yeRdqv78qwADxPP5VO46gWI28iegRXAhDP3OvGtic+wU5iGu81LG2h954EOW248YCuH6tKgxmN0PEMEStqRhwgZeujcIv0SJ0CrFF6V10UVtSSc1/CXRqMlj0uVRwrrLzc4iZxTxOi6VdauDZAIuCbLkyLB/TwkgfdYaJzYdOclN/xEIsAdNm0w= 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)(52116014)(376014)(366016)(1800799024)(23010399003)(261021123027099003)(261009223027099003)(56012099006)(261022105027099003)(38350700014)(5023799004)(10067099003)(22082099003)(18092099006)(18002099003)(261021121427099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cUtRVmthMmpWVUxFeGcxVHpoZHZuRmc0ejJrSWRJMzlkRnpQTngvRE1ZbXRC?= =?utf-8?B?L0hiVDVmWmx3L1VvcDVXZHZTakZnSTJYa3pLV00xTDF2clhZenJwaEVnWSs3?= =?utf-8?B?aTJTbythd1h4UmVMdHJLM3VaL3F6QThtTUJQMmM5c0ZCZ3JTbEVNaUtwaTc4?= =?utf-8?B?OENtZGQwbU1lbG8wVmlMaDF6dHFOZU5hZjRQb1lCYzJMdVduN1ZLZnl0V3My?= =?utf-8?B?SDJ5b05VK1VGU00rUEJSUW1pRjlTb3lvREorT3BwSmpnR1NheDJLMEowQmZm?= =?utf-8?B?WFNEdnVYRjNOS0ZHZ2QyNndqTzM3UTlLK2dlb2JTSlJEY0xaSEZsanYxWWJC?= =?utf-8?B?Z3gxOTVmSXpzbktNaERJTWZyNy9rQnB2K2FiRnRTV3AvOGJlbGpMemZEczdm?= =?utf-8?B?a0w3bGo1bjE1YkFhODVSWjdwZ3U1RTBlSXluaWh5ZFRCaDlMU1RDK0sxMW8z?= =?utf-8?B?QUJUUEUxRUtKSTZaVjFDVGZ0cW5yOUptc1pYZlhlMGxUZ3E1YUcwcmFBYW81?= =?utf-8?B?cDMzalRwbzdwRnVhY3UwcUFKTlZWLzkrbVpTWEU1bllpNUhFUHZybFUwOE5t?= =?utf-8?B?OWxTbTVOaTEyejRJdHRNTlZxSzJlMkFpRkxyVzI2VzAvUEprdUFCWG5BOVhv?= =?utf-8?B?YmhIM1JQLzYxUzVIT2JPVCtIVDl0THAzcU4zbmRSU1hrN1lRSk9WZ0VudHll?= =?utf-8?B?WWtHU2IxMG1pOFlFL01MWmVBa1F3NDg2WkpqaCtOZ2xydzVkWUFRWnRVR2lR?= =?utf-8?B?YUlXaXRrZGFiWVZDRFc2Z0t3c0R3d3c0N3NQaldnb2dSd3MyVk82eXJVSXM0?= =?utf-8?B?RTQzSkFRNnBiMGp3eWxxUHQ2ZllYVDBpZExpRjZJc0J2em9qSDRuN2NUdHd3?= =?utf-8?B?MFl4NTdFVXdyWTdTQ3JBM0NGSTBYc0tFZUxDbGNpMEl5RlkvQittaEwxVlVi?= =?utf-8?B?VjVxU1hOaUF4Kytsbk5GbEFPWWFRTWtlUklFZFhaTndZYnh2RDJSbmJITUNi?= =?utf-8?B?em1mU1UvRk1HL01UbmhTMXYzalI2VjNpa3JsQVFtSUFrLytsTW9SbXNNRHRh?= =?utf-8?B?cG5SNFl1Q2VwNHVNOEY1N3ltZnpBQ20rYnJQWU9lV3A1QTZVSE4rNXJrNEdL?= =?utf-8?B?TldPc1JaK1crSzBzQWdHcmxlYjFaS01yYjVJeHlPcENMWkhRRHhUOXBMTFh6?= =?utf-8?B?aEY1MzVGUUNXczIzM2F3Qnh2eUdla0w4ai9vNDhPTXo4eU4yZGNJVlBxUmMy?= =?utf-8?B?cWZ0WHY1Q3FBZUxGSDNmem1UQWI1bzZvOWpyRDl6SEUxclNWeDRkNDFSYUoy?= =?utf-8?B?U1ZPek1pUGVnNEZqaEpnVEVEN3ppL0RleVQvTjRYMlBaVkdaTCt0V0Q0T3hS?= =?utf-8?B?aWUxVGVwVE5uaHptY3pDRnlSTGw1L3BjM0JqS3NwVXBSUlJkNDYrNkhlVWhK?= =?utf-8?B?UHZWdHlWS0FvUldORTdMY1BwU3FWSi95dHNyaEM0WC9iZ2ZxQmxhYzdadHhL?= =?utf-8?B?WjMzU3dNQTlmdEVuYTkzZXV3QlJ4QkgyUEIrYWcvS1JGTEYrM25PUlVRaHV5?= =?utf-8?B?NFY3d091bVBHOTl4TlRkZUY3NlQvU0tmUTFLU25OVFRrTnRvMGVUVmZzZ0tF?= =?utf-8?B?cGJmSjZ5Z1g0RUZnc0RpcmNmcjhFdkxQN2hSaGxmekRacGxRRG1YZGp4TVZ2?= =?utf-8?B?cm83OXNrOE1XK0FTTXIxODdwYmY1c2VkampYTWNUNzhYNU1QUCtLc01DaDg3?= =?utf-8?B?UmZ6UG1IQmpSWUJyTWhTaVo2YU9iR2hmUDVVNnEyY3ZnUkpGZVhKTmNDbFpo?= =?utf-8?B?a3EvamtpOVRkUW01RnBERkhSSDUzNVNtU1Nibm1wV1l1UktCRnh5SWY0M1pS?= =?utf-8?B?WHhVdEc1NTIvWFhTeGV0VU5FdE5pajhlZUdwSVVISmdlek8yNm9Gbm5XMGVh?= =?utf-8?B?V0pwRXVUdjhVN0hGNHRocWJNeE9EM1RRMGFrcklRNDF6NEtoWXJybll6KzdH?= =?utf-8?B?dVBUbUR4WldyeHh1LzlraEtCU09KSzVwckpoNE1uZmhCLzFRaGtLSTRtdlhm?= =?utf-8?B?Zm90dHJlRGMrQ0xwSFltMm1MVnNreWFMbjJJbWpwb1pIQlZBUG9pKzFXOUEw?= =?utf-8?B?Q3E5T1Rvc1E2cGlwemprVWtRNHF4SitiVDIrckZ6SDdDVnE2cittd1R3VDBC?= =?utf-8?B?VTdUUHVWMWU4ckxxOXZraUQ4eGE3S1RqSUY1WWh2TWlncWt6bUl3U0N6dE4x?= =?utf-8?B?Zyt3NmR5aDBaQ0hNcnJWZTRPVnp1S0cvZm4vNXFacEZzcWxwTC9xcWZjb0Vl?= =?utf-8?B?T2pGVlViZzFORWZxVUxmOVRHMVR3bDY1dm80ZEZYNVlWWUdrWVJZamNFWkFY?= =?utf-8?Q?PDL7VrqALvOM1wGY=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44d782b0-d633-4be6-f638-08df31264694 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2026 16:54:17.5034 (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: Fp1DSy/nZFTSh+KVMCp2onmrbmvOOBzS3ve7gc6Mbo2Lon9FhPU5Ou5giOdBfN29dWePI31wevH05CFrNuI28bHoaAK7d5xEjjz21eMvUso= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR08MB10185 cpr-exec writes the device state to the migration URI and new QEMU reads it back after the exec, so the URI must capture the data: a file, or an exec command that stores it. Nothing checks that. With a socket URI, e.g. a save or a live migration issued while the 'mode' parameter is left at cpr-exec after a failed qemu-update, QEMU sends a stream without the guest RAM to the peer, execs the stale cpr-exec command, and the VM is lost. Refuse cpr-exec with anything but a file or exec URI, the two types the CPR documentation allows. Fixes: a3eae205c601 ("migration: cpr-exec mode") Signed-off-by: Andrey Drobyshev --- docs/devel/migration/CPR.rst | 8 ++++---- migration/migration.c | 8 ++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/devel/migration/CPR.rst b/docs/devel/migration/CPR.rst index b6178568a85..2f34a6d7c9d 100644 --- a/docs/devel/migration/CPR.rst +++ b/docs/devel/migration/CPR.rst @@ -365,10 +365,10 @@ The VM must be started with the ``-machine aux-ram-share=on`` option. Outgoing: * Set the migration mode parameter to ``cpr-exec``. * Set the ``cpr-exec-command`` parameter. - * Issue the ``migrate`` command. It is recommended that the URI be - a ``file`` type, but one can use other types such as ``exec``, - provided the command captures all the data from the outgoing side, - and provides all the data to the incoming side. + * Issue the ``migrate`` command. The URI must be a ``file`` type, + or an ``exec`` type, provided the command captures all the data + from the outgoing side, and provides all the data to the incoming + side. Other types are refused. Incoming: * You do not need to explicitly start new QEMU. It is started as diff --git a/migration/migration.c b/migration/migration.c index 2f8ef20c036..39f70328fc7 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -258,6 +258,14 @@ migration_channels_and_transport_compatible(MigrationAddress *addr, return false; } + if (migrate_mode() == MIG_MODE_CPR_EXEC && + addr->transport != MIGRATION_ADDRESS_TYPE_FILE && + addr->transport != MIGRATION_ADDRESS_TYPE_EXEC) { + error_setg(errp, + "cpr-exec mode requires a file or exec migration URI"); + return false; + } + return true; } -- 2.47.1