From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023085.outbound.protection.outlook.com [40.107.159.85]) by lore.virtuozzo.com (Postfix) with ESMTPS id A192C81065 for ; Fri, 30 Oct 2026 14:45:43 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NAaVYVMF445ADJQUsHDT1xpRmVkva4qfSfbkRylPcvluhUJKW9PI3preaW26+G+amI57ZPDPmLI2nJ5aB5mTbLh+AlF8fIVU3Ry42emJ2en9jtkHDuEkaaRPmS5l9JD+z/PP0BzpH7TAYOdWrB8yDBNPc6+KEeZIUXShte2DKr3M2QitVoyCIA99kP+zTZ5rbKueEZByKFaaFoXdKeI7xERZbZo48lfDp1Cf8qC1+r+oWYwldOKWT8a+ZMe5Dc1qE+otVo0EWQcpwLpZCaFXGi5PhkvQdwGdZJFks2Fo9UYTWPwFLugdW90YwN0xP1SCIxOYwJTRlq2OnAy8vLZ8Xw== 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=R122N8BrQfbtCqfx5zUS+idcjMw+JPxrTI5G2y2WsKNbPAUSSRUfjVoBWt3rJsa8jTeElir5zViYU6Lm3nQPyF/93sacBMAl2AqGY6AfzH8c4/GVFeqCn5gN1EQVL15bFo8AgoKRF2a/UJ2/5Z+6+jZtQ6uNx7SJvNlfMXSfo3LO8DD7mqrgoI9iu76Hhii/pwW/9bIGZJ+9THSH9RIwcOY1B+b93rP4M0kWWuBJoSjWFGnnodbuzKVll8OZubfT/TxhUvjHNUCxTwNhT3Etjw1ZrwHkOV9OOzTff1bRdtIS7/X3K5fP833NoprDHBV71OMAm6BMoC7MD4B3i0vLnA== 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=q5XbDr3IJ/KW6EU80UwuCp0pAzkv1kUtjU3ut1tDVSCM59dHM3D/NeSGEj/2EDwCYMpGhR6TsHNVjdDYkpxTq6w4b0LJj6kdYJBMsB35EHHtSBfF4CImwa3H+bLxpelXSDVVO+ZRITyyxmzneRb46/KMtGX1VL/r6EmShaf+IVV0yL4FCZYiD27VxVlB5+R+FIttJPT7k3J2BZBd28nLqZ3N1mnn2zTcQKUdVYJRJADLQv/JiBF7bpY+sxveeBpMKrD+UZSRvpSW1dZmF2NNKKNFxVZXNMg7/C5gfOnigSb9MXahU5fichHo7T3J3nRyp8EX56Fw/sLFfT9vb/Aanw== 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 AS1PR08MB7451.eurprd08.prod.outlook.com (2603:10a6:20b:4dd::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.9; Fri, 30 Oct 2026 14:45:42 +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.008; Fri, 30 Oct 2026 14:45:42 +0000 From: Andrey Drobyshev Date: Fri, 30 Oct 2026 16:45:35 +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: <20261030-vfio_v1-v6-4-45de246bc92e@virtuozzo.com> References: <20261030-vfio_v1-v6-0-45de246bc92e@virtuozzo.com> In-Reply-To: <20261030-vfio_v1-v6-0-45de246bc92e@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0502CA0031.eurprd05.prod.outlook.com (2603:10a6:803:1::44) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS1PR08MB7451:EE_ X-MS-Office365-Filtering-Correlation-Id: 6efb4864-5d19-459f-2c71-08df369478ca 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|52116014|376014|23010399003|1800799024|5113699003|22082099003|18002099003|18092099006|38350700014|56012099006|5023799004|10067099003|261021123027099003|261028144727099003|261021121427099003|261022105027099003|261009223027099003|261026121527099003|261026140227099003; X-Microsoft-Antispam-Message-Info: /tP7LWjF3E/UkEu5TY0rsxIS2wHb2gHvxnbEc4tuk6q6NO/QnAc6XwZcmyIRsgb+6dUVa9xuAvWxTy3YbipNG/4CQ8TD73JnmozGY/QPKHWmoFxgZ7FCUKHxz7PLVj2XNrkI+39T7EBtLkNSp1di42ifzQiBEj8sSlzKaww6RxRUW3dNhbrHUSpl03LlD0+3gHWC5Ov6LXdAHpJ2fU6gqCOBmp8LMc+e6z8YSDrb3tIkqLuH08SEY+S9Q/WIYCJ74TFqcEZ+p+zU5MoaPWEg6oSzYcfcZn94w9Dsf/WtQV9vTq2n/dgOaZx9h8YTr4pW2ZgyFGTvrIN6JlrMGs6+MYZn+JNz1cas4jOZYTi5rz2H7+eetHbHuk5laJtuHqBrvhtNzOALsvEr/i7BSbGrDjnOfObA35vIqF6QcmZmemkqO2+pqznVVqGBVLKrSsxdCZMYF1EyQwImfqeWqqWMu4aDnD9KP/oM8Kvn8Smd5JrIwMBrmfOGq4Is+cNv6fH2mFbAsTzN+ApGJUlUQxLQ3Gm660RvGGAPmqAhstbmit54dfWWOGswQhGyjHz+4kuQYq6F2Mjhjf60aZKUIZdVMpIVYg8+Hk/rcn66mkXBTqNhU1LH8pinnRsdwM4vUwOHjAnvlCf+FibiPpC0AFOx/SefYVs3feZsoO39atCXgIYMffsmkizSmQKdWr7SiF1HlB0LZgI4//syPcS74Zj73hAfQKVsvcQlKqjKRKskQss= 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)(52116014)(376014)(23010399003)(1800799024)(5113699003)(22082099003)(18002099003)(18092099006)(38350700014)(56012099006)(5023799004)(10067099003)(261021123027099003)(261028144727099003)(261021121427099003)(261022105027099003)(261009223027099003)(261026121527099003)(261026140227099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NWo0b2JlamU4UTVzd1phY3hQYW5oa0kzU1B4MEQrTUlHdm5mNjhkOTRaL1Bm?= =?utf-8?B?NWdGS1dTejdNWVd3eVhJZkhxQ1hwM2QxUjIxTjFZSlVyMGFBQThQaW5XYzJE?= =?utf-8?B?ajNDZWJHdHBhYlBSeWQvN2xFUDhCUzRrakVSSi9NVGF5K0FGaEtSaVgyL2Qy?= =?utf-8?B?SVN5RVVvMFFLYnRvSDNGbksxblQ3L3lGQWJ3NFRYTWozRlljS0M1cTBZRERa?= =?utf-8?B?YTBWSnZFTGxJL2t3WVhiTWZybURNbEZDWGpsaUZvKzhWd2xLWmpYTU9mN0Vo?= =?utf-8?B?N2NBRzNFRFNmSC8xSDB0VkkyUXZYbFJ5bzc4Z0NCdC9KS3VTODk5dzZyQWlH?= =?utf-8?B?cU9kaE5rWFZKRlZ5RUgzcDRNZUk2c2x6WWtsai9SWkZsYUp4UjYrTTNCSStx?= =?utf-8?B?Z1lsdnhqSXh3Z0xlUllrMkxBWDdCakpuWDA4b1N0RW53U0FieTV0QTk4Y2hG?= =?utf-8?B?cDhDYVpqQ0xXWENhY2RJK1BXRk1haWxWSllRZjRlZ21HN1dwdEtaRk81aTg3?= =?utf-8?B?SVhNNVhIMTZxRlg2RHBzK1lnTlBML21ScFBjQy9yYjRoRU1uUkllZi9mWGpU?= =?utf-8?B?ZThIK2hNREVwejdRdnFOUVdsWEU4eFVpaDZXV0NoVXRiRE5FNGk2aFYzTWF2?= =?utf-8?B?MHVYR0ZuRnRpNTJ0akhLSVZpSHpPdzdRd0FndlRhTkpndm0yVEljaWR6VHA5?= =?utf-8?B?ZlY1SWtQNUp1UVd5cFpIOEFzWUVLN1N3UGZia2ZKVEtyYUp6SEozMTljRnlG?= =?utf-8?B?SEdZRzVrZmZTaG9KNTFzSllkTjFkNVVDbUx3MHhLQk9ORGpxVFVmNGhTc25L?= =?utf-8?B?Y1I0OFg0b1lsby8yTzV1L3lqQkUraEx5QUowVUhoVGMvdHhQRWdkZTBQMmVH?= =?utf-8?B?cjBWOFd5VzZnd2psMjMzY0p6dVhZcjQ3YTRvcCtWbzJsTkRQQU5YZGx2QzlG?= =?utf-8?B?VVB3S0RFNGxEUVdmU21CdzFkR1llMXRwTWJZdnhibDY0bVZDdTRWVFZZamVM?= =?utf-8?B?ZDBUQkxNVis0RXBBWE1yS3NZT21mTDlsV0dESFNmTGh0eHFMMTZMdUtraU8y?= =?utf-8?B?VFQwbXFJU0xjUGI3RmRaTWU5Mi9vaW04SnN3WHZVWmlMRCttcGttK0M4MjRZ?= =?utf-8?B?c25wQVloRFl3SHErcE9FdmhVZEQ5TVFLS05OWWMyRjh6VmZHYXFLcWFiYitl?= =?utf-8?B?Vk8vZEhyZUR1KzlLOElrVVN2Q2NmZXowWDBNajdTNGtaNTVZeWtmWS9xUENx?= =?utf-8?B?K1JpZGs2NFNmbG5Kdi8zaGFybHdPbWJKYkEyQ0hTaHc1UUVodWlWdUszMzZT?= =?utf-8?B?MXk5NVB0MXB5REFoNmhtYzNqZXhRbG5MdC9mS0VSN3lqMkFWMnIrUWtNT1Ru?= =?utf-8?B?Sm9XYUxKZUJ5eWh3T2dCVWVINDNJbXc1Q29GUCtBMitVR2xKY1hFRmt6dVox?= =?utf-8?B?NUVKcXg1aGtTSjlBRlpSakQ1dTNFR240K0JaeUV4UzY2c3dHMEtHem1pSklw?= =?utf-8?B?WXdyTlkwL1RZTk1nTjhJang2VXhXU0E1MVpCN0treHBXYlNYbiswWU12YWJx?= =?utf-8?B?VURNYzhRK1Bob1V4NHo2WS9OcDFpbldZbWpieHE0cWYvaWtqZGZnenQ3RCtP?= =?utf-8?B?aU5wRkd3M0VIcjdrWVlIT3FMSEdHalNra2YyeGYvd25ENloyOCtrU1lubVVQ?= =?utf-8?B?R0xMTU9CZzd1UVdlQkNpK0h4SUt0aHZYT2MzdTRvRjkzdkpMaEJpeFNnUU4y?= =?utf-8?B?NS83ZlRYR3VSTm9SM2ZuWHVuR1ZwaFdRc2VoTktYR2JIemV5SmVLSEFoSHB0?= =?utf-8?B?QWdMaEpwK3lTdFRvV21MRTUwZ1QzMk5sWldSYUhyNW0wWU5YblVDZENXWFA2?= =?utf-8?B?N05FL1BYN1FqMGxYTUlMMmJVV3VGVVJWTFlsTm1QbUJuZkxMYnZ5ME1paGlu?= =?utf-8?B?cUt5VCs3aFhoc3hFR1ViQ0xGMDhoV3pUd1pLUmdHcFNkbHQzL1RHVlNIRkxG?= =?utf-8?B?NFlTWWI1cGQvZUR6YkVhSWxVS2JJVHJBOEoyc1RHcWs4S0llZ2taNmNUdHB6?= =?utf-8?B?eTRvTktFck9MbDdpSERsVVRXNlhFRzV2L083MmtTc1dpWGtkYXNOVHJRRnZL?= =?utf-8?B?dzVoNHZMNWNUbG9pd2tYdm1GMyswMmtxakQwZTlRVVJCRFNTYUF6Rkt6dFNK?= =?utf-8?B?cjlQVGhlM0ZBRVpmQlAwZG1pSEgwVkIxeUwvR1U5SDdQMlZCZHNMSG52V0d2?= =?utf-8?B?S0tjUTYrQ255cUUvbk9od1VTTmxXdmIxcStPc1lldmZvRy8vU0hWZ21Qd0Jt?= =?utf-8?B?eTdNdFNRQ1EvOTYxeTBmWG1VQnBLMDBXa2hZWmF3TjNURnI2clNsdk14STF4?= =?utf-8?Q?ITJUb275/E/QSg/U=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6efb4864-5d19-459f-2c71-08df369478ca X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2026 14:45:42.0613 (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: V6LzNg9nlPtE9BFhfNFRAN6ereSi+Zw1V76oiBpyVaj85X+i7g10b92mV8bGhpzGXVIlmMUdKr2Pg5lvutvqilj2iuTyeQlnl2JSqqsPSTg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7451 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