From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11020085.outbound.protection.outlook.com [52.101.69.85]) by lore.virtuozzo.com (Postfix) with ESMTPS id A35F180460 for ; Fri, 16 Oct 2026 15:38:26 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PVwlGVp4Nqj+ncnlz3XvwYb1d3/4p9Og9rT/vrqEEi1jz6QmCKjhyhicNbhFEJvIvJSg/LeW4xUIyZHw/FjduJKV+JEynulHBzCboesMLkeIreFAReEBYzkRV5lsOx89wE+h/QemB5R10RClPokooQYk2yBB3CftC2+lF860PQzVLjWoyQ4Uqp8RH9vP1fdelX9wUhvJFTEUC5StPQNq3wMPdL+oY4HpFBf48zqka5IsWa1UIPdghm8pCXxgDrsLXiXcXisYpRiqcdjV+0vtSFO9CHNn8CyrkslU/0NmPUOr1nGYP8+eZM7b/r3Zp3Q08iruMFTLilJHju+ak8UIyA== 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=p7MiNAK1WaVwbjZAg1dtR/euHJZAwGhB0I1Hw9/S+BY=; b=SIxM/a3FXwAoDC0U1rVFWpPbulUUgWZpFQGwAo9JzrBffWbtF9GLCJd3At590OZJAR1hiLkoaD0RPCmqYgmqL6QO8FBlgjgSE0wToUViFKA4XfproKa1dt9BvvX0oMQTswcVUNg9VMu8NUHp+6lB/0os2NLCK64A15soEa0VSwGm5JiBDmximiqaQ81XhOLAz6lOt2lW9X7Tp9axcaXgGzPsOo9W6Qg9GHADjwe3MCpc+q3aHuuFeULw5OsDmbblakFKv+2gq71/jme/mujPCyH4drxsR5D12OBGDqDHHvQrlfzbfyei23Fl66i49j+vC1QnUmEVeNnwn1qevhlXcA== 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=p7MiNAK1WaVwbjZAg1dtR/euHJZAwGhB0I1Hw9/S+BY=; b=dZgX/Nse0+CJbIZc+vKWABw/cNjl1dOgnuFAQmqy2yNbPJNhLYTrZt3HGtHqqSb5gYjS6TaXez50PAH6Wwt1/eyl+m02mNoQY2Bdq98rUniHnZfoK7BawBKlAhaeXAy7xljnyFHoWfDmZ+6RA2a1RkHX0sAp6+K2Tmu8xFxdng4= Received: from ZR2P278CA0038.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:47::7) by CPJPR08MB069002.eurprd08.prod.outlook.com (2603:10a6:380:20c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.7; Fri, 16 Oct 2026 15:38:23 +0000 Received: from MI3PEPF00008481.eurprd02.prod.outlook.com (2603:10a6:910:47:cafe::43) by ZR2P278CA0038.outlook.office365.com (2603:10a6:910:47::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.522.4 via Frontend Transport; Fri, 16 Oct 2026 15:38:23 +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 MI3PEPF00008481.mail.protection.outlook.com (10.167.240.168) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.522.6 via Frontend Transport; Fri, 16 Oct 2026 15:38:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=23yjbh4k34hwzfubhuiim7m4inbd3ick; d=sashiko.virtuozzo.com; t=1792165102; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=NETuZNDltC1C0WEHNVG7gf6aEsYgD1QA1YzQ6jpCc6s=; b=C7LRVEZlZeqyDJqPTgw7KieMXXPKRfwjAPqbRLmYyI9TTEts4MEEu/0LQvkripIZ 67+e11QXilkhBkrBWrUvr+IraRNYJuLViTvq4ijssYBPOH4Nj7Z3BQX/nFxmiXTdVnA p0NZTL1VTlPvt0kBa6jgq1Xo5lcU14aimBYwOv/okzaURLKKSl/XsCvbJKp+9zVp1uT m5MQjTO520axBZbjOcaQL56wzMGkf9oJb3nmADnF1krF/3WO5akUyO9QTERZ0Bi/d/q fC9IxWkZXb48H2vTiLccpIEbdRCBK1P/HEPIHteY1ZA9pnslXVzeD1VTSe2+SsPuq3q 7rFUD3DInA== DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=qftdzk2dqsatjnlrq4r5brjbihpfcrsh; d=amazonses.com; t=1792165102; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date:Feedback-ID; bh=NETuZNDltC1C0WEHNVG7gf6aEsYgD1QA1YzQ6jpCc6s=; b=WICWxBzkzAS9JH6ang5hVbWAk7unoNH3l7KMA5OP2t9GDZhLA8IoECI5LBCGXXC0 /1mAs691c/8mNOkRFp8oNyQJhx+E0lH1BNc2mnl8T2FXx4PPiWQSNpGWjoxhpc8vB1N TstEQAHC0Ij6g/cdV6Sey32v65v/7aUoinIfRwsk= Message-ID: <010701a1455d44ee-f6d8be50-aee8-4d0e-8152-c46d460a00f4-000000@eu-central-1.amazonses.com> From: no-reply@sashiko.virtuozzo.com Subject: Re: [PATCH QEMU HCI-8.1 v3 13/28] migration: vmstate_save_state_v: fix double error_setg To: Andrey Drobyshev , svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com In-Reply-To: <20261016-vfio_v1-v3-13-47487cb5a8e5@virtuozzo.com> References: <20261016-vfio_v1-v3-0-47487cb5a8e5@virtuozzo.com> <20261016-vfio_v1-v3-13-47487cb5a8e5@virtuozzo.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 16 Oct 2026 15:38:22 +0000 Feedback-ID: ::1.eu-central-1.2wRQJBpg9g1fGRYexx3dUuYGS25Bux+2TEOx72/m6U4=:AmazonSES X-SES-Outgoing: 2026.10.16-69.169.224.6 X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MI3PEPF00008481:EE_|CPJPR08MB069002:EE_ MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 91164b03-c1a1-4369-1db7-08df2b9b8351 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|704161411799003|48200799018|9140799003|61400799027|376014|32142699015|4113699003|5113699003|55112099003|10067099003|22082099003|18002099003|16102099003|5023799004|4143699003|261009223027099003|5063699009|56012099006; X-Microsoft-Antispam-Message-Info: D/cqtuBTErSgpkTC5E1qP+xvMKap8Y2RD5cLX2i6jMUuU0QYz2JDehPGcCCNbnxDhvm7rFPo5U0Aee/SVnGqTOstFzfoHoFkfF2lyK5JBO4GSeTrc1cx/TtcolCf39xazi3Q3e1fcbi93QyDFmqQhifmvHQGAclkylu7RZRZasmmm7G84im7D5hMxU9Iyz9Drwu8FZILWQM0Za9kZ3+TKsxyYCwG/Wnx1/sRZHEucrgwmc4FRkYK7/8n9QHcTg8FOgXQZnAI1WKmNslQNQ/vCun2EF8aRwmdxFpqepbJAIME7aroLGC7ppSUAKdff7PNFq643PIPmoBFQ/q3Y9KZqwo6af7xiRGck2s58iw8xyrbvV5FHrelp/3HviU2pQihfw7p1AoS7xYs3wCXInyZuC9i7LJppHB+i/l6XmBrQfqfjoUiX4EgM3sp0dHtnvuGkT9K1p9BoEV8OVc0Yk+wcNL38a2nYiB3EWvcRLqBHqutlT6gG1aozUpIBqVHhx2VdR1oNCFNz2JSW/r8XFlkWIDYl0s7k1dQJnOLq/T4kP2VfER4asVX+2Zoj8vi6imnp/ifHEsJCApHw9cM3FD/A0I2LUrjcD4hfQRY6z2DCyuqR6IXITN08mzh+7dOsG388d9JtflQD9Z201rEK0CMcWOtXJ0K/v9qlvPSg5+gV5RH1zoOrbK20ST/xU44eZ71FJ0ikHZ1YDF5HuBWi2qqUW0NopnnCCBwbi6dzkDZS8c9nZ6krjFrJO+3pnaA1M6dmuKjCrfSUZYE8gqT4aZF6YETdSz8XGhdQ/nYwSWr8lIzL1uaYoh4EKBZ/YQZL3LnW55Eu6Wcr+WsJUOJXQHBqtAZAm7ied2SX121b1sr76Rlukcn24oxiPjiEzpbBtcq4ohbRefOjTNp4iPPm4VJog== 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)(48200799018)(9140799003)(61400799027)(376014)(32142699015)(4113699003)(5113699003)(55112099003)(10067099003)(22082099003)(18002099003)(16102099003)(5023799004)(4143699003)(261009223027099003)(5063699009)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ph7uBbTyMjRkZQNS6xv2XNh3CMELM77kKiy0xGhkchhpwSbvTFzfMFiecQhiEnmZhjBFNCDNEepgw34HgIbxFZyAAoEzXgjzjm2SWgN+UXABoO5CMNvsrlTPY3fywxA1HetFprLp4+84ztloFqIez0YEh51xV75a4uf8+peQkBzqTcAlkigkXNsDdkW3ZUekVsspdlJaUXzZvMdZNk390aE52xkqvROLjewnW3GxGnB/PZkV0YgmQTitQNZ0z9iZMw0+cSquVN2eZXBl5BTVjKViUKnV11A6RZnyiXuDdP7qL1y+GXahOWJTPipX54fCc2kZwh49GRqj242aSe7WVDhmSaaZPOmDYjOjR7UFHhEEJkY/d8iG44uPvE3NACYBKVo7VlG+u167G8GO1W0TnWbs1UVKrXGWWRDuZV48FYLadRmguWn4OcyQxMUe2i7D X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 15:38:23.2293 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 91164b03-c1a1-4369-1db7-08df2b9b8351 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: MI3PEPF00008481.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: CPJPR08MB069002 Thank you for your contribution! Sashiko AI review found 1 potential issue(= s) to consider: - [Medium] migration: vmstate_save_state_v() sets Error only for ret < 0 bu= t prepends for any ret !=3D 0 -- commit e68e95a3b4262b7b5d21222eb858ca4b5d64cc07 Author: Vladimir Sementsov-Ogievskiy migration: vmstate_save_state_v: fix double error_setg This patch avoids calling error_setg() twice on the same errp in vmstate_save_state_v(). It adds error_setg() after a failing put() callback, and it changes the later "Save of field" error_setg() to error_prepend(). Link: https://lore.kernel.org/qemu-devel/20260304212303.667141-2-vsementsov= @yandex-team.ru > diff --git a/migration/vmstate.c b/migration/vmstate.c > index aea41c099463..04903131257b 100644 > --- a/migration/vmstate.c > +++ b/migration/vmstate.c [ ... ] > @@ -523,6 +523,9 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDe= scription *vmsd, > } else { > ret =3D inner_field->info->put(f, curr_elem, size, > inner_field, vmdesc_loo= p); > + if (ret < 0) { > + error_setg(errp, "put failed"); > + } > } > =20 > written_bytes =3D qemu_file_transferred(f) - old_offset; > @@ -535,8 +538,8 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDe= scription *vmsd, > } > =20 > if (ret) { > - error_setg(errp, "Save of field %s/%s failed", > - vmsd->name, field->name); > + error_prepend(errp, "Save of field %s/%s failed: ", > + vmsd->name, field->name); > if (vmsd->post_save) { > vmsd->post_save(opaque); > } [Severity: Medium] Can error_prepend() dereference a NULL *errp here? The new error_setg(errp, "put failed") after put() is guarded by "ret < 0", but the failure branch below is guarded by "if (ret)". For a positive non-zero ret, nothing sets *errp before: if (ret) { error_prepend(errp, "Save of field %s/%s failed: ", ...); and error_vprepend() only checks !errp before using the message: util/error.c:error_vprepend() { ... if (!errp) { return; } newmsg =3D g_string_new(NULL); g_string_vprintf(newmsg, fmt, ap); g_string_append(newmsg, (*errp)->msg); ... } Before this patch every non-zero ret went through error_setg(), so this asymmetry is new. A positive value could reach this point through the wrapper callbacks that return the nested vmstate_save_state() result unchanged while passing a local Error instead of the outer errp, for example: migration/vmstate-types.c:put_tmp() { ... ret =3D vmstate_save_state(f, vmsd, tmp, vmdesc, &local_err); if (ret) { error_report_err(local_err); } g_free(tmp); return ret; } put_gtree() has the same shape and returns capsule.ret. The nested vmstate_save_state_v() returns any non-zero pre_save or post_save result: ret =3D vmsd->pre_save(opaque); ... if (ret) { error_setg(errp, "pre-save failed: %s", vmsd->name); return ret; } so a VMStateDescription whose pre_save or post_save returns a positive value would leave the outer *errp unset and crash in error_prepend(). The same crash would also occur for a negative ret if errp were &error_warn, since error_handle() leaves *errp NULL in that case. I did not find a caller that passes error_warn. I did not find an in-tree put() callback that returns a positive value today, so this looks speculative, but I did not audit every pre_save, post_save or target/ put callback. The later patches in the series do not change migration/vmstate.c or migration/vmstate-types.c. Would it make sense to make the two guards consistent, for example by calling error_setg() for any non-zero ret, or by checking "if (ret && !*errp)" before error_setg()? Using error_propagate_prepend() semantics is another option. --=20 Sashiko AI review =C2=B7 https://sashiko.vzint.dev/#/patchset/20261016-vfio= _v1-v3-0-47487cb5a8e5@virtuozzo.com?part=3D13