From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022126.outbound.protection.outlook.com [52.101.66.126]) by lore.virtuozzo.com (Postfix) with ESMTPS id 412DB8122C for ; Tue, 3 Nov 2026 13:57:30 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r3pMpP1E2A+hrbjgYteV9AgBIiQrC+C35t/57WLS+SlzZU5KrVhIxvUXgh3roqAmF7QT5gsIWsKIwD3y6QeLkREmHQSer4E5cQtMoBYlTziaIP3IXErdlwQ8n35WRTNpw/7VTf68927QdBT2EaOXMNmqS9+4mAQVBNa6WTOfpGKc46u1LEBy3XiYJ95j58nNmdzzdTnw+B5sAz/fqbnslMk5C6/Qhszd48s3MyNJSdbEwVg0GftR3G0rupfAszfIZtlCQq9CiIq2PufyBDSRIOyWl6w8DGasjPyd1MeM/C2ZzVCT07yCvQ2+4kE/Iqx5WR6r2+7USFW2TFUNN0CNMg== 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=Uvnb7M5dYRRgHBxiNXywVg7tYYRNIfJLEmzVgIhuO0c=; b=WWLRyKwxjDNlpWPi+L/3cSpL6gBOYxJ+Xw+Z5QhMHLu0Q1icsjlgTLtCUhtW9ndxR+NT87cXsYsc5swhApyz1one6RDfODUxO+zaSKKk6HKXpFVql74sOJ67aKfVHZNmEAsCYwTFZT1tK5tdZ7q8UWw7UJ2z89YBLfyfSJ9tIgimfyIhECb/6onA3tJ0K+FFadcgGbrHjOA5F9DBf6CaFccr3oXWczYGp0JIlb1yjsm3hxntGlbn03E5vCLBTIFrTLitUHobtiXq9Iel+NbpNM0lhlF70ugd4ZoxAE1ibCc49tK3ZPELo3HhWL9fhVDADlBOEPsVPQVEX2abdG8+Eg== 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=Uvnb7M5dYRRgHBxiNXywVg7tYYRNIfJLEmzVgIhuO0c=; b=Zlyng8k/3Nz+c7eNYmMjAwhtdCGeh7KN93ro1/7WqtJwvftmX+OAbzhK0MrM5/92wW87us0B/wMhxTC1+CEw3OG6po2vlahObIlsk9+s46WB7rO9sIsHmi2W06iRnDRB0v9OjJ2sIXUgIuVS/qPqN7N5MmLNwCNzh4edxNMX497h0nQeZw4L7yFCqEDeV8H7/8yx7DvrDtOmMPw3Ahww8sZqQV9mM0vZo+pA+ML8mxdKd/yyozWKAbXCMRyOqpnVWFlnrbIwidD7X8KfTuI1uNn+sN/iNTdswCrqRIo84GBvNW2YS+QtF3weiBP77yDkpe0aiWticv3rvI2h+pAPQA== 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 DB9PR08MB7423.eurprd08.prod.outlook.com (2603:10a6:10:370::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Tue, 3 Nov 2026 13:57:29 +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; Tue, 3 Nov 2026 13:57:29 +0000 From: Andrey Drobyshev Date: Tue, 03 Nov 2026 15:57:19 +0200 Subject: [PATCH QEMU HCI-8.1 v7 04/35] migration/cpr-exec: require a file or exec migration URI Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261103-vfio_v1-v7-4-4467fdccbbe6@virtuozzo.com> References: <20261103-vfio_v1-v7-0-4467fdccbbe6@virtuozzo.com> In-Reply-To: <20261103-vfio_v1-v7-0-4467fdccbbe6@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI4PEPF00000153.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::86f) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB7423:EE_ X-MS-Office365-Filtering-Correlation-Id: ba07c226-92b7-4eb0-0e7c-08df39b2647f X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|23010399003|18002099003|18092099006|22082099003|38350700014|56012099006|5023799004|261009223027099003|261102123227099003|261028144727099003|261021123027099003|261026140227099003|261021121427099003|261022105027099003|261026121527099003|10067099003|5113699003; X-Microsoft-Antispam-Message-Info: gOX5JkzAYWpiyHJixxap8oRdL+pAVmKVoXXVcZNmLyIjjofDO02xil/eLTgvaaZK2+AtSyY29nVpv2iThRf/k3FG2E6VzPHcbKUWQG/mbHr4DKgairpU0GWT8KXXd4/upfypRMJQDqeusDWfP365gJ41ssOpeqEpSf/JuLGZ991GqI/fSO23HzbV42Byf19H7E7WO+dKz/dxKXJZcYxhqeAvfoKsPpN29PeKmMQhqURNfAgQg+kZCYBIrpcjrpAaMVV8hvBS+Wc+RxTexW2DgOKMM/HsPKzV3e4xZlzBOeCtcuWePAXWC8lxfj0W6TlrPjlzIxKislHvWnEHZ/w9nbAbVMymGl59Scmhk+6bMbYGUlaSeMrqR0wgTJlqZzNRVH915i+TQLY6jwMDJBFzOi2/Wo40X1gjQ+c1pEalNhHB8QDIEP/8v9fZEhgjrCp0wsHmrmOXGVFGuiVnDGnQRt013feoerfh5LP67GXipT6vRqqjlC/mR0LkdiIU4/UHSboCjfEdqvZNKYEyuRNNEezaBS3uogS7acEX4KfDECDgcXs5nMywvwzGgC4WXm/Fq1+bh2UeLZgwf7NOGRO0RJWPjHe4OOiy/+SxYzm18XBatWmNkTLxSjBXflve2nvj8qjZ8yg4dwEP9TWsMbAc1e5psS0E9gOMxSWz4CoxFPRRVZTvvWyhYy1FQNtuv3n8S/6ULUjEm/rFecBYGxITa57kEB1V627GK2fHNNoxB80= 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)(366016)(1800799024)(376014)(52116014)(23010399003)(18002099003)(18092099006)(22082099003)(38350700014)(56012099006)(5023799004)(261009223027099003)(261102123227099003)(261028144727099003)(261021123027099003)(261026140227099003)(261021121427099003)(261022105027099003)(261026121527099003)(10067099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UlJSYVVNaXZmeEtkZWpGWWtMOTZIT1c0NkVFMmhSTkc1TXJ0dXBETnMwUGxw?= =?utf-8?B?a1pkQmZPMk5NSHV3NnJreU9PQXREanBnWFVMdzVybnpzVlVyWjc5YnFoZE0w?= =?utf-8?B?b2EyNm1FY1RGVkRzNzk2K3JjVjZVdGZaU3U1SkJvVVpWSXlodkpNRnp3QnZE?= =?utf-8?B?djg2ekkzVERkNXpyaGdPN1lsM3VuTWVrRXMyODg4Z1c2K1YrbzI4VzFSOUpS?= =?utf-8?B?bEpycml0YTY0eDJLU3F3QzdqVzRnYWk0YW1Bb21Ma2JVcEl1bytvRVJyRjNS?= =?utf-8?B?d05LYk5PLzF0TTdodUtpUGxEdExCVzl4d3prQjdLZHZzVkRwT3BLakIvWGQ1?= =?utf-8?B?MnVmTzg0YzMwdGJ5NTExWWYxaHhuTDFSOE9FNThnZnBhU1czK2ExNUExOGxs?= =?utf-8?B?QUJhVGpHSjZoS3lPREppNW55eVBGaEp2TlEyT2tseE1iNnI3SU1zYU9iM3pM?= =?utf-8?B?OUVtaWhzQ2tRLzZhUTNhSDhianVzNklkL2tmZG9hOVZkbmtWclFHSnBYUTJr?= =?utf-8?B?VUQyWm94VG1pSFRQMmZlMVhvWStyazFISW5QbEJVZThTRjVISll5VGNNWnBq?= =?utf-8?B?RzNKalFUVE1BdktPUXBxYi8xMjNnM0E4Wm9UVDBYenlIejlWSHRvQXFqQXlN?= =?utf-8?B?dXpkeVdIOTl1QjJreXZQeVVVNG90NTk2Z29yK08wbTFEZ2hJNHkrR1YxODZF?= =?utf-8?B?eHBaMVpscWdXUjFtQytMOTQ0U2hSalV3MzhYZmVlK1lQZmlkMjlrTSthN1lh?= =?utf-8?B?d0tRTEIvdGFFWnNNbTBBcFYrWnhyYXp1cHZ2T0xXOVVXc0Z1eTlKb1RDRk9X?= =?utf-8?B?THVLbmNHaXRzN1NzclpnWFpTcktMdVNVeEswUmZEQUNsOGFjcHh5eStPaklT?= =?utf-8?B?eDFUMG9YeWdmYzdsKzZ5WlhuZXJadis5NHFHa3UvSmQxL0w1cW5laVhGaW8x?= =?utf-8?B?ZVhacVd5RkhPbFlobE90RUtwN0Vic2hiL1JTUHE0ZldPcTNESGRuOE8wOUYy?= =?utf-8?B?SXRsS1MyMEpCQytjbkdtZEx1akdzT1ZBc0FVeitnMmRjaFhtTTB3eTBmS3dW?= =?utf-8?B?YVpjNmQ4RThCZjVIbkNKb3p2TFNwTFMxNHhiR3E0UWw1VWd4NWtjaGt3Wnky?= =?utf-8?B?SnZXSHF0My8vUUNSQmcwQzA2NE11TDRBaFRPRmxxTWhJQ3lLWG1EbVI1TTBy?= =?utf-8?B?ak0xK1R6aGxmRm91a1dRZGFPbmlkWnRwbUFqZ0QrVi85Z01RRFJPYVpzc25T?= =?utf-8?B?Wk42NzZTelFYdFNKcWI5emQ1R0NsTTJydWx6U05aVENCbmxaZSswZXdJbWpr?= =?utf-8?B?M1hGZ2hsMXhkSXFqUmJ0RUlmY051R1o4aEp1alZuV0NXNWZxT21sbUpqOStm?= =?utf-8?B?eHhZOHJNMlVJeXVqdkdNbEZDNzZnSjk0Tm9xYXpUS045QUNCdDhNcGRUZHBu?= =?utf-8?B?MWk1N0FqSS9uVC9NZ0VnTVZDUHNIMEZvSkR0bUxLS1JVeTRrbkZhandpN0g0?= =?utf-8?B?N3FHL0tYR0RHMklpY1ZwSHZzVEs2VmJkUjRJdHBNSWhyMmJXRlB2WWFmNEJI?= =?utf-8?B?SXZtcEVHRFVrMTlXU2FhT0pjQkkySDY3TWVUa3BUeWR6blhZSXF3c0hlWWVR?= =?utf-8?B?cFZOY2RuTlo5Z3VOTXpuakhhRjdwRE5sRWZvQXlsVmNyWExxMzZLU0daOTZU?= =?utf-8?B?Ry90YXQrRVAyOEZhLzRQdzVBbjBRRmZ0STBDeVp2Wm9WdzFMejkwZmJKeE5l?= =?utf-8?B?MzBiNFl6TjdYY3NpRmVoR3ZhcjJVN0NFa1V0bVdpWDBNZEhxOEFQWVB1eGta?= =?utf-8?B?azc5allqLy9yRlJzS2JtZzBoS0YxN3BoaExXZWtsL3orMHhKVFdQVEcrb1c0?= =?utf-8?B?ZDhzYVljS1RmUktSUFJzUU82ajVvbWdTWFZSWktoL0pncDAzamlLdzdIeEs5?= =?utf-8?B?bURhZFpQOEluS2FXOEFNZHRlZmM5MjhBNWp0YnBDUEJXZG8yU1ZpNTdlOHhi?= =?utf-8?B?QkhLc0c1Vlg2aUM5TGpYb0pvTGNJVW1Sc2p3TWU0OWdNQzFWMDE1SmU4a2U1?= =?utf-8?B?a3h2d3J1MHFjbDI5Z25ab09iRHhMdzBIdkk2TnNFTVpMc2RXV01veU1NNmIy?= =?utf-8?B?cXBBWFJ0bWFWbWlISm5oYm8wa1UwdTBGdDQ5aXdqYmoxbXdncGF0L2w2ZURQ?= =?utf-8?B?ekxoem9VamNlMU1NS3pJSzloYVBPbjRVV2ZodWtTMzJqaGtwdTYvbjEvcTVK?= =?utf-8?B?dlJ2WnEyRVJDN2ZVTUVuZUlOVFhVbjdDU2JqYzZXSXVxQ2tDVDA1d2F6cXBo?= =?utf-8?B?OVNGUTNmOGl3UG54a2JhZ1I3UVhvTll5VlNFU21JOElia1Q1M0d3ZFY3dmNq?= =?utf-8?Q?waP4//Hggzj0bQ2U=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba07c226-92b7-4eb0-0e7c-08df39b2647f X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2026 13:57:26.3981 (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: hK0PgalYtj2lpc1vvnhDwM/esXu+Xyc70d6zOxt76RZYBFJI9mHNx6x+kOBZr5qwUW0OjS6sOLI4kxutKNHVmbTWBcdMJoxJkDNAGWlYu5s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7423 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. The check covers the incoming URI of new QEMU too, where the mode is cpr-exec as well. 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