From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023115.outbound.protection.outlook.com [52.101.72.115]) by lore.virtuozzo.com (Postfix) with ESMTPS id 25C5B8045D for ; Tue, 3 Nov 2026 13:58:32 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dIJsEWg2b0DZOfcizwId4ziP3cUzvctDBF4KioO1V5JQC6sdgHXvCzUKWq/sTmBBU9ERlOed/TfbrGUlVm665em6Xcrlha0kLO9oXcl/XO+3+rDHvrLnQnrQxj2xhGwn5UobVb169f+5haWA0oBUXxVm2YouqHnGMAXjOf5VlS542x5A8U/CtzS4KupHiQgiaIMjcE5P5kn4FFf2nJConNQ7drc2DLHzTasLyYqim16wy7BJRIjcSJPeihlVwZ3+hJEx/XLxEVJYi/lK2hwaIlLw+08ZOYMqeYWwBxMrpRj4nh3cxpOxm6qfz5bEKpU6fpa2P+7WcJWe4wG1GIfylQ== 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=hFXXHiTVueNF+Xg98g1l2fWRX1QMHmZHR3m6Tit3k/8=; b=u3qg6YXdF2yRMI7p8oJF/YszLAVCHsBE997ftEHiNmLYsAXy24Nas4gK1WAp8WtphysfVNrXq2NypItNtNPUIUSsRLnYdy7MBfREktiQ52SoFV1n0ucQxS2USmxolNCYzYjj395cnd1yFcmIJyGuXuWniTSohfR+M+AN1s7RFbSk4/dgkHeUt1C3DsrxP2HxmPfkMYELcUFDBDRWY6pZtdTDudQRkU6Fy4tkChjZIPsoIveqPKl/PQKJZ+EvDHPe5XXjByCPmSndwLfTuOfzRJaFCdIwouKnOIRwqyFOIGSWGMlvz/WJ5YYl5YbN0/Jngx0ce5Q+SBXDbwoYiMpsEw== 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=hFXXHiTVueNF+Xg98g1l2fWRX1QMHmZHR3m6Tit3k/8=; b=HXscjnL2OAlmuzXhxrP8hN/MeM7or+duuNRVTBbk0a6tv//klmUY6mD/8y7CL13WIA9S4DTtIC6Aggp0c7dh8xw+w3K/Ouy7dsutux8AiGPfsTL0/2cnIfc4noc0pchu5jks5m7ZnVBBfDFiUhYOjvIqze0aj4iark3Xd+Ge9at0h2au6wH6E3yMy4jBmEImAzOmZtAM1RHZSbsLquI5KieybCBcAXesx/ov3a1BH0yf2cwRYygyrBGw/ZIfpJVLXVPO/FkMI5Fz43o7YRp3za/8LaKXI9QD8MLwchzIdo7e7IjvlvpmsVj1fhHzXRt3Q0/+bQPHv2KcyETu084ZOQ== 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 AM8PR08MB6338.eurprd08.prod.outlook.com (2603:10a6:20b:369::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.8; Tue, 3 Nov 2026 13:58:30 +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:58:30 +0000 From: Andrey Drobyshev Date: Tue, 03 Nov 2026 15:57:45 +0200 Subject: [PATCH QEMU HCI-8.1 v7 30/35] VZ: migration/cpr-exec: abort cpr-exec if memory can't be preserved Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261103-vfio_v1-v7-30-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_|AM8PR08MB6338:EE_ X-MS-Office365-Filtering-Correlation-Id: f285f49e-02ea-4dc4-4e86-08df39b26a4c 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|52116014|376014|23010399003|366016|1800799024|5113699003|10067099003|22082099003|18002099003|56012099006|261022105027099003|261021121427099003|261026140227099003|261021123027099003|261102123227099003|261028144727099003|261026121527099003|261009223027099003|38350700014; X-Microsoft-Antispam-Message-Info: 06fzQE0TXfXVf9kuf3P3IwBvp/kF+3RDuealuCDEkF+/y35Z45flPduiIM8anJe6XQDpgKRKeBEvhwzm9jnnfXPqv/O9P8N3LXUKVVpyQQac0sGdtYDq9NB5FkiYH3+e8pTJpWjIIcOnOZkaV+cOAw0j5NG4ZA2YA32zch9ybwHzOQYEWSP/BX44TgfZF6iNITRG/WA2BhWPDH+KV+1sA4NTrCRUp2gXd4RQs4a/9Rc2guSXmIvtIeK6/O6Y3CKWMy99yIwmFe5M56YxZkzubCuHCn4dtjE+/MTanq0Ra7ajYnw6+28rlj4rgJm96AEhtaV6Gc50zU9IOn+YZzFra83Hqm8/olMaEld1KWGhpFcHT6rCUM1wdcj5Gquvn76NrxMzgzmdVQ0IwwCDpxKcwFBvpKnq3Wk5F1spnc8oo5Sr6qxqzwSDXLDnhXIaJXuanx/9Fzta1Bjk1TgFomwD1I/CvdAU8Eji9u4s44RjgOE0Az/6trWBSIJpyYCOzqzYVbf1ZMmP7/nHFfNLDnTi+yrEjGHObbpYQNDnXH302eWx8f5d752e/snMI/gLTmTkUE1sbEttbI3Op2saMwUV/H+rMUTD5s8CZNjmmwu6Rvc0ezOzDXh4ZqY0XxY7g5ypf62+vWDCe9cbOqkoZyc57N5V37OyUemyWGn6f7HS1MSUt3BIlS2HGUjdagK+Fo7NjxR0TNaJS/Vb4LFwilN8lPPcwsSMMPNMZjCowhMs6aw= 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)(23010399003)(366016)(1800799024)(5113699003)(10067099003)(22082099003)(18002099003)(56012099006)(261022105027099003)(261021121427099003)(261026140227099003)(261021123027099003)(261102123227099003)(261028144727099003)(261026121527099003)(261009223027099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?anUxdEpCdVlCcG8zMVU2VVk3a2FFZlovQWdnY08wZzl5bFk2bm1aWEN6Zi9j?= =?utf-8?B?R0xyaFJPc1lCSDhmNGpVRmRNbjFFNldXTUdqRDdoVUw0d0RybDZaWUk1dmZH?= =?utf-8?B?NThwV3F4RzhDZkt2aGc2SVFSKzBtZ0pmcCtWaUZlWXJXTEsrNTdGdU1kR2Jj?= =?utf-8?B?Ui9KUGc1ZVUwaE5lUDQxWkpXMU9LaEwyMlZMME1wUFlEYjl0UUJiL2htK2Zh?= =?utf-8?B?K0t1T1A2bWl0ODFxb0VDaGlLTVlhcWk3OWFGY2o0K0d5MmlSWTZTV3VsOFR1?= =?utf-8?B?ckNLZXNlU0ZYZFdsL3AwcWo3RVRFbmRJYzNCUzFORVVOQW5hWHd5c0Zna05F?= =?utf-8?B?L3UwM21YUEN5QWRwSGU3REFTTnRpMWpnMjNsVTJnOW1uQ0FSY1EyeVBxeWor?= =?utf-8?B?NG1YVUdKT2FicndCZ2luNnBOamZWV0x3M3RlUEJqOXVpd2xzYTUzQUZWWlJY?= =?utf-8?B?aUIvaVNLeGY2WXdnZGxEWWpqVmw3M1VobzdUUzRwd2hnVGZwY0xDQVlaMDhv?= =?utf-8?B?d2lZUTZhVjJIVCs1RWZBTnJUTkFDZ1RHUGcxOHJHekNQOXdtd1M5cGJIVCtq?= =?utf-8?B?QTJFdU55RWlRV3hCWlllWWhZTXJaNGJmbUpXQ0VnUUs5aEZHK213VmFITmF3?= =?utf-8?B?S09HcklCSEVDTWxxbHhzVkM1QzBvUGJTNEZzSGVraHBpWnlFcVZ1OUtteWl6?= =?utf-8?B?TzRRS2JyUWpCcUE3U3N4MTUwQmxNNnErWUVzQ1BWczR0L05GQndTdHlLWW9Q?= =?utf-8?B?S3JqM2psTWN4OXozaUZ5N1RhSUg4U3ZIV3RuSFZ3SExENlhpRmhTOGxXWHZa?= =?utf-8?B?U0Q2dUw1RWFHdWY1ZGVlOTFFclFHVXcwLzhKUWc0U0c4NXBmMGlXWUROZzh5?= =?utf-8?B?elArOHZjaXFPTGlmSm9PdFBqM01zendsZEMrbGdzZGxuM21zdlBRRGo2VHBL?= =?utf-8?B?RVg5cWJKb0ZvL0hEVVVDTTNzY3FxbE1qb0ErcUQ1YW5HVzgzaEYxNDM5N3pN?= =?utf-8?B?MkNYeGhKN3FoUVJMWEk5Rk5VbFJESlVLNlg3RVZWTks5V2FqQi8xWFJrZ00v?= =?utf-8?B?RWxyWnVrYTNzanpqaFZ3MkNFZzVLZmNaWjV4Z2xncWhQRHNtQmlURzZuMXli?= =?utf-8?B?a0ZtdUs1dC82Zmh1VXc1ZjdzbnpCbU5wYkxMNCt2OVlEWjcyU2Uza0ZjNWYv?= =?utf-8?B?Z1JmSjR1ZzU5ZDRZRVdVMll5enJSVzljRmowZFhIYmJuLzNmeXNiRWkvNGNl?= =?utf-8?B?QzZWcXI4b3V0MWJ3WHdBQ2Y5MHZXTExyTmQvRmFPdGJkZ2xTdEhRT3dLSVpj?= =?utf-8?B?V2U2VVpEWjNlalZ4Z1QrbExxVGZGWGZBZGR6T2YvaWhoaGs1Rkw5RmdnK05N?= =?utf-8?B?KzN5THpMbGg1ajhzSWIvdWpvVWlTemIyRGhGQnVsU3IraDJkSjZJRVdFOVRH?= =?utf-8?B?bVgxam94YnJ5Z3pKa1lmS0hmTzlRdHlxaDN3MENxRmhZejFHaTYrZ0ZRQU9o?= =?utf-8?B?MGhOVXQ0SjkrUkRDejgrZmtReVdudCtOako1d0RCeE5QcDlreVl2Q1c3RklU?= =?utf-8?B?YlB3bDVEV09EeS8rZ3VVQnZLWDU2eWZmWldJZ1JsbWJNVktIM0FoMVFVMHFv?= =?utf-8?B?RHVaMjJsMnZuNllvbU1EU2dWcGhvSWhwait6WkFqMlVFUFNKUDhlZzNTMnVP?= =?utf-8?B?aE0xaFQ0QUUwWEdmWXd0YjQ0dkM4d1NzbmkvaEx0NWd3Z0EwUDVHZjFyTnRC?= =?utf-8?B?eW0vQlFYbkRuZDZMQXNmeFd1ZkZyMDI2aVZpZnRGakphaGhnZDdDRXZtOU9w?= =?utf-8?B?Tk9HcnJ1Y3FhVnFCTld2dnlLZnJjUGt1bnhHT2p1TXV0dXk5STNZVnlwRVNl?= =?utf-8?B?K2lGUmErY05mR1hDa0hIcWhXSXFMNXQ3bkFNT240eXJBTzZxYi9jS3ZZbzdI?= =?utf-8?B?Q29BMXp2QUhvRUxTMnRiZm1kWHRValp3VzZhUDJCTTBHTGlGUElweU00SEx5?= =?utf-8?B?Z09vS0dCNENMbFB0U2NqMlVZUGE0WmU3RFBJd09iZUlidzh2ZHdXbUpZNlBz?= =?utf-8?B?bGFuSDZMWXdyVnAzSkljZzdOWUdGRi9Od0s0S2MvVUhpOXdILzU0UThScXJ6?= =?utf-8?B?bXdCTTN3eUhVR3ZTQzFRbFVFOTMxZmRuSytNNFVETFdxMlB3L1diRGs4S1VT?= =?utf-8?B?YnpWZTlFYWFrVTlZbUltc080aXJhSjI1cTU2cDF6Uy8ybGJvZklieWJ5QUxt?= =?utf-8?B?cDd6ZzVQQWlVbEQzK2JHWTZSRURTZElBd1VVcTlWeEs5YllTakwxNUU2d3l0?= =?utf-8?B?bzE4V2ZKSHZRdzRDK0k1dkU0UWo0dFd1TWRQN2pmSHdSenBlbGVWWjZpOExi?= =?utf-8?Q?Qv0Gxsvni+HrlWUk=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f285f49e-02ea-4dc4-4e86-08df39b26a4c 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:36.1261 (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: G972bK6tDn+P/jtFX1/7qkuUo5v59wElCGV4ERazrccVLnZ1T+IYSHEil9EdEn4x4CqM0Gj1Z4+V88jlq4QsrYeTH1JMkugwi86mSDBCroQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6338 cpr_exec_cb() marks all saved ramblocks with MADV_DOEXEC before exec, but ignores the result. If madvise() fails for some block, the walk stops there and the remaining blocks are not marked, yet execvp() still runs. The new QEMU then reuses addresses of guest RAM that wasn't preserved, and the guest is lost. Treat that as a failed cpr-exec: go to the same failure path as when execvp() fails, so the VM keeps running in the old QEMU. On that path also clear MADV_DOEXEC from all saved ramblocks again, just like the preserved fds get close-on-exec back. Signed-off-by: Andrey Drobyshev --- migration/cpr-exec.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/migration/cpr-exec.c b/migration/cpr-exec.c index 77db262c139..005d0062271 100644 --- a/migration/cpr-exec.c +++ b/migration/cpr-exec.c @@ -163,6 +163,19 @@ static bool preserve_ram(cpr_ramblock_t ram, char *name) return true; } +static bool unpreserve_ram(cpr_ramblock_t ram, char *name) +{ +#ifdef MADV_DONTEXEC + qemu_madvise((void *) ram.addr, ram.length, MADV_DONTEXEC); +#endif + return true; +} + +static void cpr_exec_unpreserve_ram(void) +{ + cpr_walk_ramblock(unpreserve_ram); +} + static bool mark_ram_rdonly(cpr_ramblock_t ram, char *name) { /* @@ -211,7 +224,10 @@ static void cpr_exec_cb(void *opaque) */ cpr_exec_preserve_fds(); - cpr_walk_ramblock(preserve_ram); + if (!cpr_walk_ramblock(preserve_ram)) { + /* preserve_ram() has already reported the error and failed migration */ + goto fail; + } if (cpr_ram_rdonly) { cpr_walk_ramblock(mark_ram_rdonly); } @@ -230,18 +246,20 @@ static void cpr_exec_cb(void *opaque) * or the system is very short on resources. */ error_setg_errno(&err, errno, "execvp %s failed", argv[0]); - g_clear_pointer(&argv, g_strfreev); - cpr_exec_unpreserve_fds(); - if (cpr_ram_rdonly) { - cpr_ram_restore_rw(); - } - error_report_err(error_copy(err)); migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED); migrate_set_error(s, err); error_free(err); err = NULL; +fail: + g_clear_pointer(&argv, g_strfreev); + cpr_exec_unpreserve_fds(); + cpr_exec_unpreserve_ram(); + if (cpr_ram_rdonly) { + cpr_ram_restore_rw(); + } + /* Note, we can go from state COMPLETED to FAILED */ migration_call_notifiers(MIG_EVENT_PRECOPY_FAILED, NULL); -- 2.47.1