From patchwork Mon Jan 15 07:54:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ladislav Michl X-Patchwork-Id: 10163241 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9F57560325 for ; Mon, 15 Jan 2018 07:54:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 86EBD201A4 for ; Mon, 15 Jan 2018 07:54:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 78B4428210; Mon, 15 Jan 2018 07:54:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93F3F201A4 for ; Mon, 15 Jan 2018 07:54:36 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 514FA2673E1; Mon, 15 Jan 2018 08:54:35 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id E658B2673F6; Mon, 15 Jan 2018 08:54:33 +0100 (CET) Received: from cvs.linux-mips.org (eddie.linux-mips.org [148.251.95.138]) by alsa0.perex.cz (Postfix) with ESMTP id 3043C26731C for ; Mon, 15 Jan 2018 08:54:32 +0100 (CET) Received: (from localhost user: 'ladis' uid#1021 fake: STDIN (ladis@eddie.linux-mips.org)) by eddie.linux-mips.org id S23990477AbeAOHyb60kCu (ORCPT ); Mon, 15 Jan 2018 08:54:31 +0100 Date: Mon, 15 Jan 2018 08:54:30 +0100 From: Ladislav Michl To: alsa-devel@alsa-project.org Message-ID: <20180115075430.GE10762@lenoch> References: <20180115075213.GA10762@lenoch> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180115075213.GA10762@lenoch> User-Agent: Mutt/1.9.2 (2017-12-15) Cc: Liam Girdwood , Nicolas Ferre , Takashi Iwai , Mark Brown , Alexandre Belloni , SF Markus Elfring Subject: [alsa-devel] [PATCH 4/5] ASoC: sam9x5_wm8731: Fix OF node reference counting X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP of_node_release() is called as the destructor on a dynamically allocated node in of_node_put(), but node pointer is still in use. Fix that by moving of_node_put() into the error path. Signed-off-by: Ladislav Michl --- sound/soc/atmel/sam9x5_wm8731.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c index 9db08826b32a..bcfb474ee0e8 100644 --- a/sound/soc/atmel/sam9x5_wm8731.c +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -78,7 +78,6 @@ static const struct snd_soc_dapm_widget sam9x5_dapm_widgets[] = { static int sam9x5_wm8731_driver_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; - struct device_node *codec_np, *cpu_np; struct snd_soc_card *card; struct snd_soc_dai_link *dai; struct sam9x5_drvdata *priv; @@ -122,36 +121,30 @@ static int sam9x5_wm8731_driver_probe(struct platform_device *pdev) goto out; } - codec_np = of_parse_phandle(np, "atmel,audio-codec", 0); - if (!codec_np) { + dai->codec_of_node = of_parse_phandle(np, "atmel,audio-codec", 0); + if (!dai->codec_of_node) { dev_err(&pdev->dev, "atmel,audio-codec node missing\n"); ret = -EINVAL; goto out; } - dai->codec_of_node = codec_np; - - cpu_np = of_parse_phandle(np, "atmel,ssc-controller", 0); - if (!cpu_np) { + dai->cpu_of_node = of_parse_phandle(np, "atmel,ssc-controller", 0); + if (!dai->cpu_of_node) { dev_err(&pdev->dev, "atmel,ssc-controller node missing\n"); ret = -EINVAL; - goto out; + goto out_put_codec; } - dai->cpu_of_node = cpu_np; - dai->platform_of_node = cpu_np; + dai->platform_of_node = dai->cpu_of_node; - priv->ssc_id = of_alias_get_id(cpu_np, "ssc"); + priv->ssc_id = of_alias_get_id(dai->cpu_of_node, "ssc"); ret = atmel_ssc_set_audio(priv->ssc_id); if (ret != 0) { dev_err(&pdev->dev, "Failed to set SSC %d for audio: %d\n", ret, priv->ssc_id); - goto out; + goto out_put_cpu; } - of_node_put(codec_np); - of_node_put(cpu_np); - ret = snd_soc_register_card(card); if (ret) { dev_err(&pdev->dev, "Platform device allocation failed\n"); @@ -164,6 +157,10 @@ static int sam9x5_wm8731_driver_probe(struct platform_device *pdev) out_put_audio: atmel_ssc_put_audio(priv->ssc_id); +out_put_cpu: + of_node_put(dai->cpu_of_node); +out_put_codec: + of_node_put(dai->codec_of_node); out: return ret; }