From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023105.outbound.protection.outlook.com [40.107.159.105]) by lore.virtuozzo.com (Postfix) with ESMTPS id 12B1581099 for ; Mon, 2 Nov 2026 10:36:26 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CWtPn7vmWEI0o0DegKpeHMSJ3dkGtONVwV5vcdXn2HMtFEyGQcjWtb7vnpT68GRwVg0lwv+pcLLWo6F5lq+m7EXEseNuD/O3qfcPq4OgfyDqHJKUx1cA1OaviIniqJbveSM9KilzMZ7wfb5036rWA1CaQg1eBikhaiHnqbwAo1yimICRzSlok/inaUol4kdkiEC1z7IWDfcrj5SMPGLy65WbOg6jI5sUqe0tnIu0xybZepQVf9RKWaL3AKQBQlQSSBKlsK5JiaWzgxf0gSaw1H1jtlRgJmiTY18X2GrBINER8WvdtgRjrkgV1XnFrl8KiG/IOu34VJjlm/UJJDMDUg== 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=Pulwji+wAvPVtitAotSoMZUv4rCMf+tdn9AR4Yml93RzE6ApIrOmrvCid3r2u38Nn0EUc7P3CHPPQ2+QV5izSvSQA9IRcBhsVR7fs2U+9A5hOI4r0JrSIG0O2oo9MRvEsB7Ohgbp6KvP/Zco7Fot1HvcJzm7cAjHStsgU1fQIWlKawYAKbo8lWV28vZ/4crFt6XCHyM9ySzMd72acMdyCN57NG4M3oTNRHQDRe6q/FXdAg7y7r7L9kZe0NWYm2V+LngQmbCVP29TUCFK5Tcg2gjmd2AeZtWeI0LRlBXo1JZmK6h291AS352NaTWBlp+K5bOMjrNoS6mJiY/Vhj9g1w== 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=h3ICmigcbGwqoN1xshXhRQX/SOMJK2gaqsbhsYl0srn38OTCGj1ajkjOiqN7oYu4yNVnNA42Wd70ypVe/eQwrnSOB3g3Yr0KVHUWPKT5Sv/6Jar4GcA9RuDWBEaIaiDgew5tx/tLrC9XdIWZ0YmvsKqswc8raSbR4wOYbzv83wwoMKeCVAiSUC5e6yckM9Bmri/OyTLOqVRqzHWvrjy1/kHHip+VySXCru5sFC9SZk+KiBoLNtZMaLFKqtFYiYn868ND1/10QWoGTmQ975Mt1ezILLClKlHVdn7Up4aIRUzxfeZcosP7YtWSCWNj4PfKXFZGFtUqs4ikVOTEZwu/rg== 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 DB4PR08MB8199.eurprd08.prod.outlook.com (2603:10a6:10:381::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Mon, 2 Nov 2026 10:36:24 +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.0569.011; Mon, 2 Nov 2026 10:36:24 +0000 From: Andrey Drobyshev Date: Mon, 02 Nov 2026 12:36:19 +0200 Subject: [PATCH QEMU HCI-8.1 v6 04/34] migration/cpr-exec: require a file or exec migration URI Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261102-vfio_v1-v6-4-9bc7cabc850d@virtuozzo.com> References: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> In-Reply-To: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIVP296CA0048.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:353::18) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB4PR08MB8199:EE_ X-MS-Office365-Filtering-Correlation-Id: 7449460a-a7e9-47b0-d30a-08df38cd23e2 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|1800799024|366016|23010399003|52116014|376014|38350700014|5023799004|56012099006|261009223027099003|261028144727099003|261021123027099003|261026121527099003|261021121427099003|261026140227099003|261022105027099003|10067099003|18092099006|18002099003|22082099003|5113699003; X-Microsoft-Antispam-Message-Info: IrAXfOAHFDsP992YkrCrJ6kqS1kcR8J3myRfwDOh1qv1DMT37VJLg1WZC4OMoNPm0jLRh4z8ipqyEia6g0emYgF1lAu+lO0k+by6tMQ2RUec4vLsTUicnJoj2P1v/SUg/qJTv1rDO8/sqry2PMH145YzzlcvVLun5NPOggbIKPC/MWWbjwXWUCwPU9X+gvCZcJ+TKeDh89B/MWaPoHMJsta++wQ+d9vPCoIVj2TEMCOljvKRCzWj4FpqRr2VajvQRIQ045TBZoeJ9VL4qCCEz386pDFr/UKjp5p0hOUe/Q50b29+IkvJ2N6SanLIxSsVxmGvjFBCW64WsAYX2RoSeyn7WFGjX3bNm88VHx7AAedqIy/eWr3mAgtmZlcX2OzxIe6oox186tjlPmLgHg9g3JEiG19aoVNmGKW5UkRJWYR/Z2E4VgvbOfVDf9TPam5gC370T+TZoMDQ/55xBBKdVaW1S6kYT2q/QCpOMqqel6gqQXxXxRFgJpuIJctCFHWxn8YdBD9oZ30Qjo/SVFw9w0JHyiSKf4baKcpNbMeEyflUPc8vh5DHs9TNKxuGEHq32uRlpp1ZZIBUONmxwLvnVHHDCu/QdupswrLNeOH4QWK3wcjs5RqPEZUp+uemGnX6ZAlI7YXiP4cWDTAZ3sl9uAdqTWpHoRC1GW352/BZNvnILMHs016vEuM43j6LBzfjpmIoKu2olpaGEgQ+toskgnLaurwsHaH06E2BUD13TKA= 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)(1800799024)(366016)(23010399003)(52116014)(376014)(38350700014)(5023799004)(56012099006)(261009223027099003)(261028144727099003)(261021123027099003)(261026121527099003)(261021121427099003)(261026140227099003)(261022105027099003)(10067099003)(18092099006)(18002099003)(22082099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UEtlZHJiUy9YMkxDVjRDMkZqenhsMzlxYWF3RCtEVktzQmdCbUJzQks4SnFs?= =?utf-8?B?VUprU3BzalJVbFZmenkvbEdSSzFBT2N6M0pBaE80cjJ4U29jYTBSRllEVXVr?= =?utf-8?B?M0t3dEFrZDk4OTErcHJqM2R0R01seVJDbWViaERzREVRZHZBdmJPa2VjTXNs?= =?utf-8?B?OFZXbVFZNjY2MDNYbjdpalJld0JsbTlEMnlOMXdzTHNZVE8yZWRoN2J4Vjcw?= =?utf-8?B?TDhtMG5rTENtcXBlbnFBT242Q0ZuNlZlWHJtUlFVbmhMRTdpK0VHMUN4bGJH?= =?utf-8?B?M3hnbmZmNzFVaGdmSmRrV2VGRnZKaU5BSENjSFVGRm5ya0lSZTk2MHE1bEFO?= =?utf-8?B?R0FNZndpVklvVHF6VUc0aGVubGp2WDFjU1JFN2pXVHpPaDB1cnMyU0sxQ1Nw?= =?utf-8?B?OHRLQzI0K1ZLMjczLzhCc0lFcnJvUDNrNS93NEcrRUZCbmFjdVRKRlczOCsx?= =?utf-8?B?NFBNUW4ydWRzbk54M0ZpUGlHYlFBcmNkQ3hhdmpoaDFraEQ3QXMzNkVibDdu?= =?utf-8?B?UmROWnRQcFB6Q25YL0pPVTJGN2Q1M2NqMURXazVDTWwrTExXQWdGT0gxVG5h?= =?utf-8?B?c0lTQUFYUmMrNDRwT2ZoempjY1VKR29LV1BNKytQTEtveHRGbllrTFdtSWM3?= =?utf-8?B?RFdkeG5WdDFGMGVGVEZnYjNNZkJDa3o2SmZ5Rjd4S0g1NzlxWWx1azFKdFdJ?= =?utf-8?B?dXdaRnRqZ1BTT2NKYmFwNjJsQTc3NlM2M0lWMThTbTFhWmFGb1UvV2ZDQzRW?= =?utf-8?B?bkxBQXU5WFdwL2lqTXFTbStMMXY1VzU5NHE0RVdoa1JBYzNJMjB3ai8wa2dQ?= =?utf-8?B?RGNMbERLdHE5bW9yb0tJUHNXN0wrTjZsMkdLS0FpVERGL0FUUlNCbTRjYzVv?= =?utf-8?B?MUNQZ1dWK1NDYUxtMDlVTkpLMU9zdFFBOStuT1hoSXhXbmU0YzdoRTFyQ282?= =?utf-8?B?TFptUlVWNzB1cFVNUUVNZExOTTk5Z2ZMVDhGZjJRVlJOMlpUZWQ4U2NkUXpT?= =?utf-8?B?d3RWUlMyeXNCUnV1RjAzcWptSHVtb1FwN092TFM4MEtLZyttc3BzOXplQmpS?= =?utf-8?B?MVNmUEQvR2g3YmNTNTc0am0rRm1Ycytic2RseFhLWm1BSUZYQkF1YjNlSVVS?= =?utf-8?B?NERQYUZuTWpOdndYTXFRZHNQSCtaY0tkZ2twSDk3V2ROWkFCWnVzVUI0WnZy?= =?utf-8?B?bExGLzllT04ybEMvbkNuS2srenBQUFBRTjZrTWNoSnoyeUxsRXhqU1ZBcFpi?= =?utf-8?B?cnJPVGRRVTRHWlpmWlpoRnYxSGpPanhTejg4cEtUMzFrRXk5R0pzYjZMNXVR?= =?utf-8?B?OHV6ZnZIMlVyQVVxNGdNdFl1SkxoMjIxQVZ1RHJ0NEo3UGJubE54ZlZGWWxP?= =?utf-8?B?SlNkUGlDUHBDMDljN0dsbitYblZza2hJakJjYVZGMU5PU1FyLzJPUG51ZFNK?= =?utf-8?B?R2tYOEhnYnVnTGY1dXowcHkwVlhBSm5tYXZ4ZGs4a0QzRW80K0FOMHltSi9S?= =?utf-8?B?R2pmSEh1ajVudEJDQ05ZMnZIR3RsQ3o3SGRmU243cVduN1lYcWRQQXFlTHdk?= =?utf-8?B?cUtDT0p0dzFJbUpsZHZXbmxBSVFZYTZqeVNqak5KUis3amZZMGNaWjM5bmhQ?= =?utf-8?B?YzhxbGJ2VzlzajNRYW9WKzNFWklTeFRmcUQ2UmZnbjljN2dxemU1Q3Ridml4?= =?utf-8?B?R01CWW1EL3RKMUxMYXdWaktUQ1JWZmhDYUVkRTFmRVJTbEduamR1UWZCSEtL?= =?utf-8?B?OXpwWXFwYSs3K0g2aDUrR2pvaFhKR0tJRmFEOERFSzhxL1NTVUtlQ1ZCb24w?= =?utf-8?B?dHhXaVVaVlBMZy8wOE45ZjVPZkxSZU52eklFQXBDQUtaSW83L1VwMklGWU52?= =?utf-8?B?TXhuelJlcFBNQ2RCbGtzM2ZjeUhqV05VMExiSm9zb0RDbk1ueTZqSTFJcU40?= =?utf-8?B?NmxlbXlHMTRiK0dUSGR2MjdrSmVzTEpVdC9OYVlncFB2a0hFdWVrL0dOaDZD?= =?utf-8?B?NmUyT3FtNzd6NDd2VlluM21XZEowWVZXbUg0UGQvOGZjOUUvQ3JJb0FHTTZU?= =?utf-8?B?a0VBTnVGQThZUFFGTElXWmprS0xRR1VraVFqaWNjL255SlJKMWxSem50Z2p4?= =?utf-8?B?bXE5TDZrY2ZJU01TZzVjdDVMeHlteGQyMDV3ZVhvQkx1eHgvSy9qRW12WmNa?= =?utf-8?B?VmVHNHdDSWxTRXRqS0phdGJyNzFTcUZkZE9xblEyUnJiN3FNV3F4eElRY3BK?= =?utf-8?B?enZNVlQ2aWRRMmRoTnBtMFRMdnB1QVNYVHVtVEl6dHZmYTN0bWxwNjY5UXIz?= =?utf-8?B?OWJZTGRUOTY2VGcrb2NHcUFQME0ra2FRZmp1QlJVWFRFWFNrNFRMa3ZjbXJh?= =?utf-8?Q?XYQQA8RYturD1saA=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7449460a-a7e9-47b0-d30a-08df38cd23e2 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2026 10:36:23.2509 (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: TKKdG8Mt1mPS8fjv4FbDXXXPEqR1320K08OzVx96NOq0V7i9NAQHGyJmnyL69NV4QoiLkycyqMJR0Ggl99BM1FSS4IN0i3aW7w/q6qnSV4A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8199 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