From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021083.outbound.protection.outlook.com [40.107.130.83]) by lore.virtuozzo.com (Postfix) with ESMTPS id BD7418017D for ; Tue, 3 Nov 2026 13:57:36 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ANmOQrjKHFfluF9E9iEHFV+aHpqm3fqW21uyqyO6uu2JSVNt1Ej3Eesp0Yax/OxnYp+dmfnYWx47US19MDhcoIm2O6shkPzScYsoubcDTsqkVcQ/TSszdCDqsCN+EVpq5SeyFuBwlkCmO+buPCIJXdcoSUpXSKdu2rKiOTu/I1ewLSkZidnWKtX+wetdT6W6CEyUv6RAED+SRIp6n4SkT2kNEnxKaeKwhiH5fXHDntRpYjLGK11A6brVFP/8mtLrDPzbbE2V4jIsN+nQhKFUimydf3ycqc2KERF2mX8aIo4E05W7Xk7W2/83fGJt6+9G2czz7VvLJ9ASmE0Y9KIKMg== 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=clYxWEr7jC+gSKb8oQpIVXh1BGM0jUxjQM6JrnbxRYU=; b=HmcZU4Q10qziKLWARFc3s+gbAg8vwdFxmFAB/MPcTM4kkuHCXu/uHnoW82Jao85PU+IZ9lKujJIh5ov8gBBZS2BoYfKQ8wzS6/Rx9+KJJu/D2iLVAIOlxVrIFI/QErs31vRCIOKDbewY3IrBJT5nX4cqvQbJlfITh8bjuW4BURDaMGSV1HcgNBRLlZQ+xRgIxaXDW3NEpEtOapupS5uqj+AeDdD+TxTzAF83BYic1f7jfVoEsRvTQiFefu2g0z6pApbru2AoOQ61IPeKIkyQc3UNr3zFRBzm2kns9S9S+nAVOo2QcasvHumdGJOScyVEPuwaYPIt9IPZEc8S9cZFow== 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=clYxWEr7jC+gSKb8oQpIVXh1BGM0jUxjQM6JrnbxRYU=; b=hhSNdfOZrEZxy7QqqL8iRLcnAzKqRXzvs704UyPZV1RwXZYI6g785Tw9lRcLO/2aHgwoBMDm4oMdSdf5gzc7A5LwGRdF+f2ltPtVAf07l0xsQ0hW2dQEJjoUoKQSUIcp74oMXEPuDO+BfSYAajgpQZ8UNVy57niL+0YXG8Ge0D41F/C7qWFYUr32xWHa2RNALexpEFI6QmK922Jbp/sr62fgIYdR9ssue/XoTVyiJeDwtot5dBvW1eRCMhyoFQMVBiPY+i26ncag2gnUa2N1yeWVXR+CTdap9x4SfCGkW88UVLFUd9WlPtZKStlvOq4iZe1pyuteKFjZrkrEgWGCmQ== 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 DU0PR08MB9129.eurprd08.prod.outlook.com (2603:10a6:10:470::18) 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:34 +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:33 +0000 From: Andrey Drobyshev Date: Tue, 03 Nov 2026 15:57:21 +0200 Subject: [PATCH QEMU HCI-8.1 v7 06/35] migration/cpr-exec: close the persisted state if the channel fails to open Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261103-vfio_v1-v7-6-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_|DU0PR08MB9129:EE_ X-MS-Office365-Filtering-Correlation-Id: 66dfd7f5-00da-45ee-577b-08df39b264e8 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|23010399003|366016|1800799024|52116014|376014|56012099006|38350700014|261021123027099003|261021121427099003|5023799004|261009223027099003|261028144727099003|261022105027099003|261026121527099003|261026140227099003|261022075727099003|10067099003|22082099003|18002099003|261102123227099003|5113699003; X-Microsoft-Antispam-Message-Info: SnBIhzc3JyivPhlOATFwfhUFXqFPv02P1trgkvWhP7fu2g6pYxxUcyC2/m4tjv7euRzqDJwMs3bcrjn1or81CQ1YMdq/BUwZKbt15DA7oZGtT75rRguvoRN3kCz6XlV4MitGB4hLGLkh+5pYWsSXUpn3G3Bgm1TrZ6jGo0+yU3KwKhuEgByzz35s7L4eWA6wU77BxBnXmYDuJqIs8amBWGUXF/Dzlg6KpFBKD90XBNzdeVNFU6YxAeJtTZFwhKGI9uP6lgu3mu3SFLNVSBuk9FIp7k8zvbWwZnuxevoRCjB6H1IK0mBCe+EuvNXeMfhv8nCbWhNwuvU9QPr8NespPwX4r+ifeu2EOB+CZDpgvnGQ1jCc8OTO+fTsX/dsShFCXaCVn66OnEW+yuzoxfUJS/1TFDzBJFIT+yIpKu7dK3JkEVEjC4lJv1PTG/5+04ZMEZMx4iNijQUjjcdG2cu2TwiolingNYmTYvDMXbPkrKVokLfHITzf3Wj3MhWb3fmUfxyjOsqU1y8HlCGBcl5AP/PLzYgZHKAANhL/eK7vbSfDR97nGkA9xqd1a9mYQjIvYA5LuPD1J3+VeVdGO5i3QvcfOjKS4B9E67XbE8yZlgdWIqVfEnf4LVBeTwY/LF0NX+yyy6CceeRUC8o126NGaaIeihy/H6FKJfb79OWGKB6e/LHpGX20TpK5Ts38L75GiKPaF7MKoO76BDliZB/ax2vDmESeOTv34/oq3hneel8= 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)(23010399003)(366016)(1800799024)(52116014)(376014)(56012099006)(38350700014)(261021123027099003)(261021121427099003)(5023799004)(261009223027099003)(261028144727099003)(261022105027099003)(261026121527099003)(261026140227099003)(261022075727099003)(10067099003)(22082099003)(18002099003)(261102123227099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RjBKcmJOSVFXSU5OVXVYd0t4bUIzMkRhRldlWTlsNExTTWlvc203Z3Z3aENt?= =?utf-8?B?WUNERW5PTVdJWFhOdmNwa0V4V1VhdUZpTDkxV0tYWFRrSEVNTGhoMWxxU05x?= =?utf-8?B?MlZyTUZCODZHdVp1STVsVCtzN2lrRWtCTDN6bEkwdDN0YXZEUTU5WEdta2pU?= =?utf-8?B?cWMvNTNCNHhyZVNWTkp2R1Nxb2VHWmJlT1JGa3VDNjFLa1RJY0pBV2FvMmNn?= =?utf-8?B?MWZ0UzdFdU1LWmc1UGNzYlYvZkU0RUNtK0lTUndlNHF1QXZacm1kbnFXRzY5?= =?utf-8?B?VldXYUFCcXFpbWtXd01VaWdVamNMZEJTVG15blVmaS9sTHRWVlBsaDcwemdn?= =?utf-8?B?OUZoVi9DeDdRdk4xOXhOS2JOTHJzTU9ObEFHblFldjhaT3RTT0NvV2VkS3Jm?= =?utf-8?B?QjFOcjA2cUMxUE5idEs0RUdHWERrSmFBRDUyWE5Pd3pkUCtUNURQeDVFRERs?= =?utf-8?B?QVArck1SUmFJekx3Rk9mT1ZpWVZUQ1NkaG9XY2I2c0JFRzlkRVVUUDFjYXR0?= =?utf-8?B?OWZ0VVlUTDlrTkpBSEwwajlkNFJucU43OFkvVERWQXU1alRVK0EvRUtkU2JF?= =?utf-8?B?YUxsZGxTMkhXRlJ5UXEreDk3cExPUlN5eW16S0w3U3pHWlBQenNRQm9xSkhu?= =?utf-8?B?ZUNvT2FGSk9kU3B2dVVvbnE2SDh2ZEZmemlUbzRaVlIzdm1mRE9mV3B1WUhR?= =?utf-8?B?WFo4WTFITlE3SVJZQ0VueExlYmQ3OEl1NlhVbTF4cGhkMkhIQXR4ZDFUR0Ey?= =?utf-8?B?L3NaMEVjbnJPbk1Kdm41U2crNk9ocmhXMElWdDcrUDZrZ3dVcWt1VTJQZGNj?= =?utf-8?B?L2gzbEYzR1QvQWZxZ2p1UGVlZ0t0RWJCTjMya1FHTVF2Yk9kdXFTc1pPa0Q0?= =?utf-8?B?YU5ZVHdBSW5NUnZnY0d1MWJVNWQxM0p5S3FnSnhlaTRGM05JT0N6bldIamVx?= =?utf-8?B?ZVVEOU5uTzlHSWRMUkZnOXY0eWMxUnNKMXUzU0JUekVFYnEwZDh2QlVrZXUy?= =?utf-8?B?RXNnTnY0QlloZXVLNEtCTTNmZ1Z5Q2x0ME9MblV4MlJkNE5RNmJVWERNQTM4?= =?utf-8?B?bHFETTZTY3JkbWdrbWtKUnV2MEtKLzFzVERHWkg4dGI2enlqMnBDL3FkaVNu?= =?utf-8?B?MUNkTnlTaVdzSWZKMXhMbzAzUXdoVktQNVJqZnVZWWRiK3ZkMlQvSi81dzll?= =?utf-8?B?VzBLVEpzWGxrV0JUSllGZlBxS01lQkp1c0dVR2V2aDJjOUU5d2FtY2lEdnVz?= =?utf-8?B?NDltaWc5ZnFrZHk4elhIejQ1MHR5RFQyTnBjcnhNeVJ3dTdtRlN2d09LYTV6?= =?utf-8?B?VnRRVzJydGN0TGxLNDNtQjA4LzUrTFFGMjROdVYwZCtVam9PL0orNVZGSTFT?= =?utf-8?B?alU0TnA2RjdJa1RWYzN5SUlydjZZZ1pBdFRMcjR1VUNIU25lemJ1Ujh2M2g3?= =?utf-8?B?eW0wTzUyemI2RTdwcFFqSVdvRjN5bElmMkVnTFppUDhVMDRBMGViWlJ1L0RW?= =?utf-8?B?ck5WbnRnc1JLeVVNTnV2SWNoanJLeFg4NWNnendhZis4b2hJRnZSNVFsSURq?= =?utf-8?B?emI3VUFyd3Z2clM0MGhRY1JkdkdXSUZURDhHQW1tS3pDUnc0VW9PWHg4aDNT?= =?utf-8?B?UW1LWHAyUmlISHJxRW0wV0kzeEgzaHFnRjR5ZDMrRnZVWGxZZ1Vzdi9NWXlh?= =?utf-8?B?a0NOaW5udFhFK0NXYTdLUjVnaklvU2VmZWVLSjZnRHRqSjl6VzlvdFNCblc0?= =?utf-8?B?QnhHZDlUSkxndmNNczRZQlZNbjVCbWVvVlhaT2VWZnlPV3BsUU9EU3NNeElk?= =?utf-8?B?R0RVT2VRNWxmRmVKcVlydnM3a2ZEOWE5OEFQOEU1azdXN1N3bmQvL3psblBq?= =?utf-8?B?K0ZjbVpIZm9ZbE5haWMzSHNJcG5hQkxzWjAyNkxtMTJBWFlmVXhRcFVNU3JR?= =?utf-8?B?Y0dBQlRJVlU0REszT0dYbHRqZlVWSDZyR3NMYUpaYXVnOExENUdQV2UxRUJx?= =?utf-8?B?UTZCVGJOQ0FjM1V3K0ZaV2t3M0sxUzJnWEJSTkFhMXo0RUZKaHN3RldWZXFs?= =?utf-8?B?dWFKQVM4VktUTTd4YTRwelVQaC9ZMklRWmtZQWpZR2V4T0xXazNQWXNjYmgv?= =?utf-8?B?ekMyQWFXS0FXQ3podmdPV2hIS2xhQWd1SmY0bUVKRzZ4RHNXcW1mOUZHUXhL?= =?utf-8?B?RlU4UG5SMm5jWkRZZ0x3N1J3bGxRKzFUakFia014R2V1dTk3KzlVVlhzZGla?= =?utf-8?B?SnFBOVh4OGJOSnN6a2Y4Qkc2WU1aYnlDTUhVdnQ4L1ZMT2RYMzJwNVFsNjVQ?= =?utf-8?B?Z05xVHlENjl3Q2pVazF2ejdON0oyVDl6dGs5TUFVYzNBWHVxbDVuaXZodjlj?= =?utf-8?Q?maPP3yvIQwBH1D4c=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 66dfd7f5-00da-45ee-577b-08df39b264e8 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:27.0803 (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: Tj9pCd2+QKEQlWGsRcVIlIv+eCttLrSdrt1T/45gbrtiVb+uB28xYvFUug/DLqbWOgHT1QZysS0X7r5Goj5O0FuleU5KIaX30XD2d1osm8Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9129 cpr_exec_persist_state() dups the memfd holding the CPR state so that the dup survives exec(), and remembers it in the environment. Both are released by cpr_exec_unpersist_state() alone, which runs only on MIG_EVENT_PRECOPY_FAILED. The migration channel failing to open doesn't raise it, so the dup is leaked and the stale environment variable is left behind, once per attempt. Release them there, next to the CPR state. That path runs in any migration mode, so make cpr_exec_unpersist_state() a no-op if there's nothing to release. Fixes: a3eae205c60 ("migration: cpr-exec mode") Signed-off-by: Andrey Drobyshev --- migration/cpr-exec.c | 8 +++++--- migration/migration.c | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/migration/cpr-exec.c b/migration/cpr-exec.c index c4bdf2cb99f..b52f44b54ac 100644 --- a/migration/cpr-exec.c +++ b/migration/cpr-exec.c @@ -68,8 +68,8 @@ static int cpr_exec_find_state(void) int mfd; assert(val); - g_unsetenv(CPR_EXEC_STATE_NAME); assert(!qemu_strtoi(val, NULL, 10, &mfd)); + g_unsetenv(CPR_EXEC_STATE_NAME); return mfd; } @@ -83,9 +83,11 @@ void cpr_exec_unpersist_state(void) int mfd; const char *val = g_getenv(CPR_EXEC_STATE_NAME); - g_unsetenv(CPR_EXEC_STATE_NAME); - assert(val); + if (!val) { + return; + } assert(!qemu_strtoi(val, NULL, 10, &mfd)); + g_unsetenv(CPR_EXEC_STATE_NAME); close(mfd); } diff --git a/migration/migration.c b/migration/migration.c index 132f0d403b7..7c2fd704890 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2413,6 +2413,7 @@ static void qmp_migrate_finish(MigrationAddress *addr, bool resume_requested, yank_unregister_instance(MIGRATION_YANK_INSTANCE); } cpr_state_close(); + cpr_exec_unpersist_state(); migration_connect_set_error(s, local_err); error_propagate(errp, local_err); return; -- 2.47.1