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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 42C02C282DD for ; Fri, 10 Jan 2020 19:44:06 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1037D20842 for ; Fri, 10 Jan 2020 19:44:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1037D20842 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51014 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iq0CS-0003bZ-L4 for qemu-devel@archiver.kernel.org; Fri, 10 Jan 2020 14:44:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44326) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iq0Al-0001gs-On for qemu-devel@nongnu.org; Fri, 10 Jan 2020 14:42:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iq0Ad-0004dA-E1 for qemu-devel@nongnu.org; Fri, 10 Jan 2020 14:42:15 -0500 Received: from relay.sw.ru ([185.231.240.75]:53908) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iq0Ad-0004Ou-3G for qemu-devel@nongnu.org; Fri, 10 Jan 2020 14:42:11 -0500 Received: from vovaso.qa.sw.ru ([10.94.3.0] helo=kvm.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.92.3) (envelope-from ) id 1iq0AV-0008Ob-2m; Fri, 10 Jan 2020 22:42:03 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v6 04/11] hw/sd/ssi-sd: fix error handling in ssi_sd_realize Date: Fri, 10 Jan 2020 22:41:51 +0300 Message-Id: <20200110194158.14190-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200110194158.14190-1-vsementsov@virtuozzo.com> References: <20200110194158.14190-1-vsementsov@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 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: Vladimir Sementsov-Ogievskiy , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" It's wrong to use same err object as errp parameter for several function calls without intermediate checking for error: we'll crash if try to set err object twice. Fix that, using new ERRP_AUTO_PROPAGATE macro. Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/sd/ssi-sd.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 91db069212..bc44e1a0f5 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd = { static void ssi_sd_realize(SSISlave *d, Error **errp) { + ERRP_AUTO_PROPAGATE(); ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, d); DeviceState *carddev; DriveInfo *dinfo; - Error *err = NULL; qbus_create_inplace(&s->sdbus, sizeof(s->sdbus), TYPE_SD_BUS, DEVICE(d), "sd-bus"); @@ -254,14 +254,26 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) dinfo = drive_get_next(IF_SD); carddev = qdev_create(BUS(&s->sdbus), TYPE_SD_CARD); if (dinfo) { - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), &err); + qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), errp); + if (*errp) { + goto fail; + } + } + + object_property_set_bool(OBJECT(carddev), true, "spi", errp); + if (*errp) { + goto fail; } - object_property_set_bool(OBJECT(carddev), true, "spi", &err); - object_property_set_bool(OBJECT(carddev), true, "realized", &err); - if (err) { - error_setg(errp, "failed to init SD card: %s", error_get_pretty(err)); - return; + + object_property_set_bool(OBJECT(carddev), true, "realized", errp); + if (*errp) { + goto fail; } + + return; + +fail: + error_prepend(errp, "failed to init SD card: "); } static void ssi_sd_reset(DeviceState *dev) -- 2.21.0