Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8077379ybl; Thu, 16 Jan 2020 10:13:41 -0800 (PST) X-Google-Smtp-Source: APXvYqy27vgYZtPtyU6u73wtPG6G9SJ6Y3lBwvHU5R13hAEv50OWYjiUOZt10n0ObFtd57B9QMos X-Received: by 2002:a9d:65cf:: with SMTP id z15mr3174021oth.238.1579198420843; Thu, 16 Jan 2020 10:13:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579198420; cv=none; d=google.com; s=arc-20160816; b=m07pj1y/xUNIwICcRO94kCTDjHUR3JfRiToUdCC/AAShimEKB0ZIW2vuONjZL5PXw0 a8Eu50uyXXgiolO6LPbIhPSmUcvid16fX/2yBlTGnf6J/cl0XIjvhOOyNkqxK2t0QBn4 +tyYaQ0FKT/2lhByprlUvg+2G+MesIHsawtFMlro8368dzyPC24u+rqJMSy7QOa3bESX b7W20tKRacd55nFGH7NFdN82R3y0U/bciBKZKV16gMn9DMJdxZfpyVt/8Zxa/X5XAN8p gVEMX+yRMrHJ1GJ4tZaNQelSFKk97q4Qxns61TVZC9YFyqWe+94Oeb7mdq6a8ZnO6K1j JCyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=NnubTU3a2cSx41FiCSwCszeLOXCbN2NcjIjl7Fso818=; b=GGcGQRB0NLmL89GN9MEMYSq99aveizeZOe1Oe0XaexXk001XqxXEfhuP/z2NFfo5kU rYesOB4gO8GkWZvZXzFaLlu+km5XkZChQxh5KiQbuNHVkkwN0aQKfekXagEtb+7Mpxkx O9EH42FDaqJYdjjBaiCIVd9nIUBobKcYhQFK9Tp0etGC4+MILm+H/iJb81GRETeICO9R NtATHMBMtvOuTwWBlfn6VtSKWOu2nzqea6bvBSFMPzLBNXxi0G+kaOSiy+W6hnPTd52e EnrIAAp+Vu26JsvOkIbz/LoPwFlyz7uGoXAh+TgRz1wb/vxWWXFUY7SLeToxpvHeIyj5 zSmg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ie06dnzM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v10si10792013ote.97.2020.01.16.10.13.27; Thu, 16 Jan 2020 10:13:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ie06dnzM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395187AbgAPSLJ (ORCPT + 99 others); Thu, 16 Jan 2020 13:11:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:53008 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2405412AbgAPRhh (ORCPT ); Thu, 16 Jan 2020 12:37:37 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 66D26207FF; Thu, 16 Jan 2020 17:37:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196256; bh=iQDNls0iKQZY7VWjwZWcjEClunbXRTdpOoezS/XgcNQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ie06dnzMhmeh5s3Qe1JQCLr408i0mZ31GPY5uC4/tIrfOgS5NWMwM/wV+BmiJiS92 Lja/mPMURDh+OFnQTB3gkWlHu+LXbd19fIEoVm2/qj7a5tEpK58DvmUikaGoUSysod 1kav48hWSrODCYyKfSdAwEchIqH5IBohjeqNym1k= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Takashi Iwai , Patrick Lai , Banajit Goswami , Mark Brown , Sasha Levin , alsa-devel@alsa-project.org Subject: [PATCH AUTOSEL 4.9 082/251] ASoC: qcom: Fix of-node refcount unbalance in apq8016_sbc_parse_of() Date: Thu, 16 Jan 2020 12:33:51 -0500 Message-Id: <20200116173641.22137-42-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Takashi Iwai [ Upstream commit 8d1667200850f8753c0265fa4bd25c9a6e5f94ce ] The apq8016 driver leaves the of-node refcount at aborting from the loop of for_each_child_of_node() in the error path. Not only the iterator node of for_each_child_of_node(), the children nodes referred from it for codec and cpu have to be properly unreferenced. Fixes: bdb052e81f62 ("ASoC: qcom: add apq8016 sound card support") Cc: Patrick Lai Cc: Banajit Goswami Signed-off-by: Takashi Iwai Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/qcom/apq8016_sbc.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sound/soc/qcom/apq8016_sbc.c b/sound/soc/qcom/apq8016_sbc.c index 07f91e918b23..754742018515 100644 --- a/sound/soc/qcom/apq8016_sbc.c +++ b/sound/soc/qcom/apq8016_sbc.c @@ -114,13 +114,15 @@ static struct apq8016_sbc_data *apq8016_sbc_parse_of(struct snd_soc_card *card) if (!cpu || !codec) { dev_err(dev, "Can't find cpu/codec DT node\n"); - return ERR_PTR(-EINVAL); + ret = -EINVAL; + goto error; } link->cpu_of_node = of_parse_phandle(cpu, "sound-dai", 0); if (!link->cpu_of_node) { dev_err(card->dev, "error getting cpu phandle\n"); - return ERR_PTR(-EINVAL); + ret = -EINVAL; + goto error; } link->codec_of_node = of_parse_phandle(codec, "sound-dai", 0); @@ -132,28 +134,37 @@ static struct apq8016_sbc_data *apq8016_sbc_parse_of(struct snd_soc_card *card) ret = snd_soc_of_get_dai_name(cpu, &link->cpu_dai_name); if (ret) { dev_err(card->dev, "error getting cpu dai name\n"); - return ERR_PTR(ret); + goto error; } ret = snd_soc_of_get_dai_name(codec, &link->codec_dai_name); if (ret) { dev_err(card->dev, "error getting codec dai name\n"); - return ERR_PTR(ret); + goto error; } link->platform_of_node = link->cpu_of_node; ret = of_property_read_string(np, "link-name", &link->name); if (ret) { dev_err(card->dev, "error getting codec dai_link name\n"); - return ERR_PTR(ret); + goto error; } link->stream_name = link->name; link->init = apq8016_sbc_dai_init; link++; + + of_node_put(cpu); + of_node_put(codec); } return data; + + error: + of_node_put(np); + of_node_put(cpu); + of_node_put(codec); + return ERR_PTR(ret); } static const struct snd_soc_dapm_widget apq8016_sbc_dapm_widgets[] = { -- 2.20.1