From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2ECB0CFD364 for ; Tue, 25 Nov 2025 07:40:27 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vNnes-0001zH-JU; Tue, 25 Nov 2025 02:40:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vNner-0001yX-2O for qemu-devel@nongnu.org; Tue, 25 Nov 2025 02:40:17 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vNnep-0005bK-6p for qemu-devel@nongnu.org; Tue, 25 Nov 2025 02:40:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764056414; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=BJDDs2m0KOHoHf4t6JfTUrKFgQWeJ1ILjt2fjWdQhZc=; b=ONqRHoXNMSpq+1aiBOjClvw5yWP66RZm1yBUHQyzG896xxvc8B4xYQU0PIt0p00QY/lcZH c0bbZCYWlfz23tUE95gxC8aEn+DH8I/zNjtuYAxuBjkTH2bybJZ11xf5ZQMUzKOf2wqP+k QLIqbHNrKbX2XbI4AalRrf+aq5sebRI= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-570-7U-wi6bYNESqMqRkcMQbvQ-1; Tue, 25 Nov 2025 02:40:11 -0500 X-MC-Unique: 7U-wi6bYNESqMqRkcMQbvQ-1 X-Mimecast-MFC-AGG-ID: 7U-wi6bYNESqMqRkcMQbvQ_1764056410 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DF4F21800343; Tue, 25 Nov 2025 07:40:09 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.45.242.3]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9DAFD1800451; Tue, 25 Nov 2025 07:40:09 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 34B1821E6A27; Tue, 25 Nov 2025 08:40:07 +0100 (CET) From: Markus Armbruster To: qemu-devel@nongnu.org Cc: peterx@redhat.com, farosas@suse.de, peter.maydell@linaro.org Subject: g_autoptr(Error) (was: [PATCH] migration: Fix double-free on error path) In-Reply-To: <20251125070554.2256181-1-armbru@redhat.com> (Markus Armbruster's message of "Tue, 25 Nov 2025 08:05:54 +0100") References: <20251125070554.2256181-1-armbru@redhat.com> Date: Tue, 25 Nov 2025 08:40:07 +0100 Message-ID: <871plmk1bc.fsf@pond.sub.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 Received-SPF: pass client-ip=170.10.133.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.075, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org g_autoptr(T) is quite useful when the object's extent matches the function's. This isn't the case for an Error object the function propagates to its caller. It is the case for an Error object the function reports or handles itself. However, the functions to report Error also free it. Thus, g_autoptr(Error) is rarely applicable. We have just three instances out of >1100 local Error variables, all in migration code. Two want to move the error to the MigrationState for later handling / reporting. Since migrate_set_error() doesn't move, but stores a copy, the original needs to be freed, and g_autoptr() is correct there. We have 17 more that instead manually free with error_free() or error_report_err() right after migrate_set_error(). We recently discussed storing a copy vs. move the original: From: Peter Xu Subject: Re: [PATCH 0/3] migration: Error fixes and improvements Date: Mon, 17 Nov 2025 11:03:37 -0500 Message-ID: The two g_autoptr() gave me pause when I investigated this topic, simply because they deviate from the common pattern migrate_set_error(s, err) followed by error_free() or error_report_err(). The third one became wrong when I cleaned up the reporting (missed in the cleanup patch, fixed in the patch I'm replying to). I suspect my mistake escaped review for the same reason I made it: g_autoptr(Error) is unusual and not visible in the patch hunk. Would you like me to replace the two correct uses of g_autoptr(Error) by more common usage?