From nobody Sat Nov 15 14:14:01 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1595336925; cv=none; d=zohomail.com; s=zohoarc; b=hEOKyn9Ua+wKBAKtoUAIejLdDYndWYk/AVCxFZ49qxbPNC0stOOonrqV/tjX3mzzSOHVw/x66qS6GrrzOVRzzfuwh5M9JynTnDnp0mkEjuzwhiOsVUO+uP98IcYffXDHvOrHuWG0G3bXabDzSz654LlRq5faFNwJhKIM3khqAkA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1595336925; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=I4wxQk2QSX5GFOP8IlvUKFhhzUCewtZqlQqKr5vSzeY=; b=Rj+uHjB5ox9AAV3kVrwg+Sk6Vm74jkDq2UQMpYWLtiyuys/L86EA0UjCRFznzJqrpZBwqGRe1pcUUp7sctJ3Sfvg67u7pu2KmsdCSjerdGVqfancLrWMQB8Mino3d+Wo4ZGYyzNRY8WuxNSPBtoZhC/d9zLCy7ZzPhlBaWpEROk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1595336925339659.5418293581685; Tue, 21 Jul 2020 06:08:45 -0700 (PDT) Received: from localhost ([::1]:38164 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jxs0i-000768-7o for importer@patchew.org; Tue, 21 Jul 2020 09:08:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46168) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxrzK-0005pK-BA for qemu-devel@nongnu.org; Tue, 21 Jul 2020 09:07:18 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:60021 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jxrzH-00015a-Cy for qemu-devel@nongnu.org; Tue, 21 Jul 2020 09:07:18 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-27-KY-_YVSnOm-XAzSee7XNdw-1; Tue, 21 Jul 2020 09:07:12 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2EC2C18C63C1; Tue, 21 Jul 2020 13:07:11 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-112-143.ams2.redhat.com [10.36.112.143]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DF9C710027AC; Tue, 21 Jul 2020 13:07:10 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 7C95E10F5AF1; Tue, 21 Jul 2020 15:07:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1595336834; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I4wxQk2QSX5GFOP8IlvUKFhhzUCewtZqlQqKr5vSzeY=; b=hnomZVFUSbOUHgWCaM4O9FYK1y+5etSk23syxieicKp/vmWyPy81CNOuLtNVBzx0T4APhM J70Ctn6g+UPxky4fRFIiM89en4SiodrP45leRRunxzeq/CRzkPUCX1Gt7zwz2GgU8RGBzR ExpQPUW+i2Mw8XwgF2aLxwfGc8LuLvo= X-MC-Unique: KY-_YVSnOm-XAzSee7XNdw-1 From: Markus Armbruster To: qemu-devel@nongnu.org Subject: [PULL 1/1] qapi: Fix visit_type_STRUCT() not to fail for null object Date: Tue, 21 Jul 2020 15:07:09 +0200 Message-Id: <20200721130709.1242662-2-armbru@redhat.com> In-Reply-To: <20200721130709.1242662-1-armbru@redhat.com> References: <20200721130709.1242662-1-armbru@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=armbru@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=207.211.31.120; envelope-from=armbru@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/21 01:46:39 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Li Qiang , Li Qiang Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" To make deallocating partially constructed objects work, the visit_type_STRUCT() need to succeed without doing anything when passed a null object. Commit cdd2b228b9 "qapi: Smooth visitor error checking in generated code" broke that. To reproduce, run tests/test-qobject-input-visitor with AddressSanitizer: =3D=3D4353=3D=3DERROR: LeakSanitizer: detected memory leaks Direct leak of 16 byte(s) in 1 object(s) allocated from: #0 0x7f192d0c5d28 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libas= an.so.4+0xded28) #1 0x7f192cd21b10 in g_malloc0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0= +0x51b10) #2 0x556725f6bbee in visit_next_list qapi/qapi-visit-core.c:86 #3 0x556725f49e15 in visit_type_UserDefOneList tests/test-qapi-visit.c:474 #4 0x556725f4489b in test_visitor_in_fail_struct_in_list tests/test-qobjec= t-input-visitor.c:1086 #5 0x7f192cd42f29 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x72f29) SUMMARY: AddressSanitizer: 16 byte(s) leaked in 1 allocation(s). Test case /visitor/input/fail/struct-in-list feeds a list with a bad element to the QObject input visitor. Visiting that element duly fails, and aborts the visit with the list only partially constructed: the faulty object is null. Cleaning up the partially constructed list visits that null object, fails, and aborts the visit before the list node gets freed. Fix the the generated visit_type_STRUCT() to succeed for null objects. Fixes: cdd2b228b973d2a29edf7696ef6e8b08ec329019 Reported-by: Li Qiang Signed-off-by: Markus Armbruster Message-Id: <20200716150617.4027356-1-armbru@redhat.com> Tested-by: Li Qiang Reviewed-by: Li Qiang --- scripts/qapi/visit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py index 3fb2f30510..cdabc5fa28 100644 --- a/scripts/qapi/visit.py +++ b/scripts/qapi/visit.py @@ -249,6 +249,7 @@ bool visit_type_%(c_name)s(Visitor *v, const char *name= , %(c_name)s **obj, Error if (!*obj) { /* incomplete */ assert(visit_is_dealloc(v)); + ok =3D true; goto out_obj; } if (!visit_type_%(c_name)s_members(v, *obj, errp)) { --=20 2.26.2