From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <010701a19bdc1274-9156ef66-02cc-4a33-bebd-1c7cd4671f78-000000@eu-central-1.amazonses.com> Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021134.outbound.protection.outlook.com [52.101.65.134]) by lore.virtuozzo.com (Postfix) with ESMTPS id C8ABC80F25 for ; Mon, 2 Nov 2026 10:44:16 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RRMCaRLg/sbbptXzPjBRBCS2zAjHj7d88bYw8xxWEuvuZEw+U9HzY9qC45NOgsOIu548VwtrJtYORxmlHDTUpNNc9B/q8yigJXX8M+rNWVepjPiA6B7Dww79fFVBdrXwh4IQp874Vr8tqZePHS8gA7ZJA1TJeC+epagtccfrv5iQl6vYUTnoacDP2xxai9WD/5UkEYwdDFCqnyZdUOIz3F522bx2E+BwcyJuiykbQUpn0iLR32OkCdZH3UMBDzT37dhozW51rqM4wvPrAWeeVIRy2QvWsozaOEJ+G4w/AJqRc/y1fB641htleEhr3IJZrnx6fcPA4sx2OIHmtMOyJg== 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=FWzn5yrO3HRwjGlmtiJ3wKtmR8qThiWVe4m5H1cduX4=; b=SBWMj/bcbsvlmhTyym+cCAPoFkyuBWTjgbtA4BItaQfhN6WGa6ksqZCK10G3Q0bA1bgmbaInY1MqFONZqpLkjggpN0lRqP7qShq/GXfucEMd3USg4uAV4Xliagt0dxI8d3fxYMjZ7ddBLBXZoaNAgiYxS/xuJaQFJhI9iyG4jjYLpV04nW7qq8Jm8QVFG+AChkSdKke1u0qHx9EFtMldGqtr2Wox4VYKKEzFafHuLC+IL5e5SQuRenrKCuDX8jvPvoDEqIYGSonWdYbtwXTbH/7shLbHLdHpxya3+wBOSqaAJYnnqfUrBp7dstLfHC4/BcM4PfazdEI3dXoElexCGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 69.169.224.6) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=eu-central-1.amazonses.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=sashiko.virtuozzo.com; dkim=pass (signature was verified) header.d=sashiko.virtuozzo.com; dkim=pass (signature was verified) header.d=amazonses.com; arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.onmicrosoft.com; s=selector2-virtuozzo-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FWzn5yrO3HRwjGlmtiJ3wKtmR8qThiWVe4m5H1cduX4=; b=aGcitfwvYZNmpJuAoSX6pkR4z4ilKTXRuewcdeFxSfHxVMwxhn0gLOuJAJwofLJUDDsuGXzwRhToO5s1fSqNENiFZ7Bdook7xMhjpmoeOFEOJeCK/y3Ffu8loRHJ+etKoghjkZn2ZIjQz7qVzRmeb987vyLpLARdijBeFg7VK2A= Received: from DU2PR04CA0042.eurprd04.prod.outlook.com (2603:10a6:10:234::17) by DBBPR08MB6186.eurprd08.prod.outlook.com (2603:10a6:10:204::5) 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:44:14 +0000 Received: from DB1PEPF000509E6.eurprd03.prod.outlook.com (2603:10a6:10:234:cafe::11) by DU2PR04CA0042.outlook.office365.com (2603:10a6:10:234::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.569.12 via Frontend Transport; Mon, 2 Nov 2026 10:44:14 +0000 Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 69.169.224.6) smtp.mailfrom=eu-central-1.amazonses.com; dkim=pass (signature was verified) header.d=sashiko.virtuozzo.com;dkim=pass (signature was verified) header.d=amazonses.com;dmarc=pass action=none header.from=sashiko.virtuozzo.com; Received-SPF: Pass (protection.outlook.com: domain of eu-central-1.amazonses.com designates 69.169.224.6 as permitted sender) receiver=protection.outlook.com; client-ip=69.169.224.6; helo=b224-6.smtp-out.eu-central-1.amazonses.com; pr=C Received: from b224-6.smtp-out.eu-central-1.amazonses.com (69.169.224.6) by DB1PEPF000509E6.mail.protection.outlook.com (10.167.242.56) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.569.4 via Frontend Transport; Mon, 2 Nov 2026 10:44:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=23yjbh4k34hwzfubhuiim7m4inbd3ick; d=sashiko.virtuozzo.com; t=1793616253; h=Message-ID:From:Subject:To:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=jniPFD0mtI9kBY99NQWWBsFCkJeXyeQnH+NUAbfQv9c=; b=EuZ1aDhkchv9QraukorvzSzjEE9M4L6Q6c2d3M3UAWNZ5YAs3XGKQKVVxfW2Vv8p 2CqCVT6y8nlu7dexGi3O9zjrEiPbSeN0kxSYfcdldoJt9PxWIOD1CmJw0N/8TjZ7aAf tWt+7Mn9s+s36dqXDMcKfU76FCGiTjKs34ypPf6ZvUKUCEHaAOdmHXmyDYN3EAo1nQd WidoErxDGiRjOc7sFwdDzPay9jGs+SKa0gwXTaP3h6A5kB4SE+gPEJzrsv5twnACmGO qIU7K4HL3/4jPEm2mN49v171NzebJa+KgEspVWW0o+EaI6B7hcXe+1X8wCpqW9zVIJr 3xyyV1YNSQ== DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=qftdzk2dqsatjnlrq4r5brjbihpfcrsh; d=amazonses.com; t=1793616253; h=Message-ID:From:Subject:To:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date:Feedback-ID; bh=jniPFD0mtI9kBY99NQWWBsFCkJeXyeQnH+NUAbfQv9c=; b=GDRuOssg3MHxqcut7HtFb8bOGTFPkw52/mdk/cBldhgPlaiWo6hw5jNRx6KVBdNz 72aJVO19yxF+oppddarSsqzrRevVgcHLx9fiFLom//Ix6IH1mv8vFiscJtn5SqjTms6 pKrI4lOwEMLepXLrsV1pPobDKxF6cHWGt2ktEGUI= Message-ID: <010701a19bdc1274-9156ef66-02cc-4a33-bebd-1c7cd4671f78-000000@eu-central-1.amazonses.com> From: no-reply@sashiko.virtuozzo.com Subject: Re: [PATCH QEMU HCI-8.1 v6 06/34] migration/cpr-exec: close the persisted state if the channel fails to open To: Andrey Drobyshev , svt-core@virtuozzo.com In-Reply-To: <20261102-vfio_v1-v6-6-9bc7cabc850d@virtuozzo.com> References: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> <20261102-vfio_v1-v6-6-9bc7cabc850d@virtuozzo.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Mon, 2 Nov 2026 10:44:13 +0000 Feedback-ID: ::1.eu-central-1.2wRQJBpg9g1fGRYexx3dUuYGS25Bux+2TEOx72/m6U4=:AmazonSES X-SES-Outgoing: 2026.11.02-69.169.224.6 X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB1PEPF000509E6:EE_|DBBPR08MB6186:EE_ MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: ef57ef1d-07eb-40d8-3072-08df38ce3c9e X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA 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|704161411799003|32142699015|61400799027|48200799018|376014|9140799003|4143699003|56012099006|5063699009|261009223027099003|261028144727099003|261026121527099003|261021121427099003|261026140227099003|261022105027099003|261022075727099003|10067099003|16102099003|55112099003|18002099003|22082099003|4113699003|5113699003; X-Microsoft-Antispam-Message-Info: Fkfz5otxBwp7S1SQ2WUO7LP+P9PU+ttWItDK0ApL+0s4nUnu7Mq/tw/jJXjLrFR5H5RmMWbSE4CAkVPY1w8ycPfsxIY+xisEoxK3uLVn8iZdmn12bsTkKLd7XTV3DDZAgiEY2ML3u3uiW1CWK+8XUFsZNb21FOXEQZf1WYFabiqcMB9ghq0o1Hk1lfxU4gtJNdtLvbPgqHNKBTWpu40OKsZhF+VO2CBt4af1G2iaFRYinSPXPce9l7U/oNnE+HbD3Dxmr37iXiTJ1kKmPnZybwSf3/IhGvZOK42PnQokxBIloGKVl9upWgTzVHE7269VWy2DmEwTc8dX9PmQqqHt81iaINlkc8guWZDMYGzMjNhvntPyEGQ4GY6LkEouko0HB5bsdaimL805BL7w4XE3LjzCqV54cuVQRD+OZZIJd/5M4U1wM9oadVKdcSYPygjbPmbCykNxkADxaqY6c5NjsOtKaybLVn+eeUVfKQOVkaJ9M3TCt9qg+nNeFKJbgzpu8LPa0SEvmAyMaYwPH4+b1RbTFbi0qSdw4UwfdWbF/LoxSKlgIyBBUdWKkf82OKZDAs38q+p3q6snFyP6v5I/Oaoi3Fm24fETRVtu0gGgZ3af+/3tXl4Z3ri8XbXWNUEEuZh63tdcc3V0aUQRO6s7wZX7g8YNs4HsByOv6ViWIZ4K+imTrjifKJNVmS2hMZnxhlfohChPRROO1OXgBaycQTfzQJDHsUBqa5g6ASYitIGrKEQjIuGQTdFWAuLYBODZ3XMs1ZoTkUKaFQCHixABVTcASUS+nx1w4M0gMLNE9RDuuBr02k98SJ1ok+YshqUv06mbeysQjdD7L0RAYGBXxxFBUSGzKdDTrdKuzfbfL+xQrXtn4ndXHy+v6Komo72R2DzIGDWuN8Rh6NEVjRRKsX4eBgAIkpdGXNZ1hk+bbZQ= X-Forefront-Antispam-Report: CIP:69.169.224.6;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:b224-6.smtp-out.eu-central-1.amazonses.com;PTR:b224-6.smtp-out.eu-central-1.amazonses.com;CAT:NONE;SFS:(13230040)(704161411799003)(32142699015)(61400799027)(48200799018)(376014)(9140799003)(4143699003)(56012099006)(5063699009)(261009223027099003)(261028144727099003)(261026121527099003)(261021121427099003)(261026140227099003)(261022105027099003)(261022075727099003)(10067099003)(16102099003)(55112099003)(18002099003)(22082099003)(4113699003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 44aJQRON6uV2JvgomB164fhwDE9XDDFzZxmz4ZT4hWZrfP8pIEunDsHDx+46vXXEklFR0eji989XElDtOwkRO8xHj8rcLEotnhHz3VmNw19dXQ4UuIpDXtKxSPcSE855IAlGjaL1OaU32V7pxEVvohT8C9doizI+wpKQnehjlB1V+bGDpbSfEYlUBXM+K4qmMesuB/0ET+FJ1v9PUqRzHD337jc7Se/ob4BduXHywKw0OUYiLMo3sSBlwyHQufrX9n5ha8QCKG+bqtPQF8qJlmxNQoED178mxKCa2Qx9JiBRpmZlk/C5JJnNLb67y0MxSEBWABUMvS6NA6BYRdhDYMSlZk3mrKK3ChBlpMNgtGX8AsWHmr+Q9eKtqZWkItE/9ctL53OD5Pisgi4DFNvxH7cCdXBB3XKJXkCtBaXH/JOmXqgg8mhw65kHlB8vgnPj X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2026 10:44:14.0452 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ef57ef1d-07eb-40d8-3072-08df38ce3c9e X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509E6.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6186 Thank you for your contribution! Sashiko AI review found 1 potential issue(= s) to consider: - [Low] migration/cpr-exec: val used after g_unsetenv() in cpr_exec_unpersi= st_state() -- commit 2730ea087674f1b28d9aa6e1ca063cdd1155b572 Author: Andrey Drobyshev migration/cpr-exec: close the persisted state if the channel fails to open This patch makes qmp_migrate_finish() call cpr_exec_unpersist_state() when the outgoing channel fails to open. That releases the dup'd memfd and the environment variable that cpr_exec_persist_state() created. It also makes cpr_exec_unpersist_state() return early when the variable isn't set. > diff --git a/migration/cpr-exec.c b/migration/cpr-exec.c > --- a/migration/cpr-exec.c > +++ b/migration/cpr-exec.c [ ... ] > @@ -83,8 +83,10 @@ void cpr_exec_unpersist_state(void) > int mfd; > const char *val =3D g_getenv(CPR_EXEC_STATE_NAME); > =20 > + if (!val) { > + return; > + } > g_unsetenv(CPR_EXEC_STATE_NAME); > - assert(val); > assert(!qemu_strtoi(val, NULL, 10, &mfd)); > close(mfd); > } [Severity: Low] Is it safe to parse val after g_unsetenv() has removed the entry? In cpr_exec_unpersist_state(), val comes from g_getenv() and points into the environment string created by g_setenv() in cpr_exec_persist_state(): const char *val =3D g_getenv(CPR_EXEC_STATE_NAME); ... g_unsetenv(CPR_EXEC_STATE_NAME); assert(!qemu_strtoi(val, NULL, 10, &mfd)); GLib documents that the string returned by g_getenv() may be invalidated by a later g_setenv() or g_unsetenv(). On a libc that frees setenv() allocated entries in unsetenv(), such as musl, qemu_strtoi() would read freed memory. The result could be an assert failure or a wrong fd passed to close(). On glibc the string is only unlinked, so it works there. This ordering was already in cpr_exec_unpersist_state() and in cpr_exec_find_state(). The new call in qmp_migrate_finish() runs in the process that called g_setenv(), which is the case where the string is heap-allocated. In cpr_exec_find_state() the entry comes from the inherited environment block after exec(), so it is much less likely to be freed. I did not check the musl source, so this is speculative. Could val be parsed into mfd, or copied with g_strdup(), before calling g_unsetenv()? The same reordering would apply to cpr_exec_find_state(). > diff --git a/migration/migration.c b/migration/migration.c > --- a/migration/migration.c > +++ b/migration/migration.c [ ... ] > @@ -2413,6 +2413,7 @@ static void qmp_migrate_finish(MigrationAddress *ad= dr, 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; --=20 Sashiko AI review =C2=B7 https://sashiko.vzint.dev/#/patchset/20261102-vfio= _v1-v6-0-9bc7cabc850d@virtuozzo.com?part=3D6