Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2429354imm; Sat, 9 Jun 2018 15:22:19 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJPG2dPJbYze+c75gwYyXiToBE9QJ9RYpNok6OMSPY5LjZ9vmZVQaBkFkAdYgfepTE7hBcO X-Received: by 2002:a17:902:4203:: with SMTP id g3-v6mr12337352pld.315.1528582939274; Sat, 09 Jun 2018 15:22:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528582939; cv=none; d=google.com; s=arc-20160816; b=ciL3EJh5RXOC1OC4tvVS0d8qowdUEJfgHY/BX3yIR7/vSqcuf3Eec4H7rClOiK0clB fyTdvFnh70mELxRrYHTbtomil/QCVVG1XQpELNbE1K33Yk6fWyCbiy3dnE9yATrk8FTB lB9a4Zyxnecs5OuN9p6N6Sgp33x9XEf0bVuHIpnFpBwrHcBtYb7aKNIDD56HZ5NdVfMO UrP2TwxVP/fbnVISGsymgYYQjGpthwn2WRPglWU11lwMPQAlFymatsWHghGmMYhJfxGP 4vwoYvm02gz2yYa6iaGIlV2GZe6Onf/5whKBq8l4W0MP1eoqbeRdcu7Pq8ZG1K+0px+7 gJ8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=d73TGSpC8+AgCjCrcej5aQVIR8c6BwMWOLdv3yugISQ=; b=mtMRJwTj8eaJTIjEwsSm7xPLLABw9EhYILe9oKP0ByUvLMQ5XxNEL6vUUXfPGkPDl2 BTovSqAla62euIOyPCfzfyr3cRbtMsU3bF5dBZznBDVuRHFXne4OtmT7D1OX7IKmoVdD C4vONtDoJJH1ONTKiIyPj6bpIfRY45V7Opql8XTlzhfq4JZmZ4Gkbzksd9xBGjWuAGrv 1Y7pEU3Is1sR0QOPfQUWY8QaE+oocIm3a1dAjzDhj0x97LygS3uQ0cPYIUHf7kbU6GJU EqJjwmfAXtD1vPr/wxXxGe0zhN1mOjnagRKZ1bweWDWo1eeiuUeS8BjquRuljL435tw+ 9uQA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w65-v6si30478279pfw.201.2018.06.09.15.22.05; Sat, 09 Jun 2018 15:22:19 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753482AbeFIWVO (ORCPT + 99 others); Sat, 9 Jun 2018 18:21:14 -0400 Received: from mail.ispras.ru ([83.149.199.45]:58122 "EHLO mail.ispras.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753408AbeFIWVN (ORCPT ); Sat, 9 Jun 2018 18:21:13 -0400 Received: from localhost.localdomain (ppp85-140-176-5.pppoe.mtu-net.ru [85.140.176.5]) by mail.ispras.ru (Postfix) with ESMTPSA id 4A47C54010F; Sun, 10 Jun 2018 01:21:10 +0300 (MSK) From: Alexey Khoroshilov To: Liam Girdwood , Mark Brown Cc: Alexey Khoroshilov , Jaroslav Kysela , Takashi Iwai , Heiko Stuebner , alsa-devel@alsa-project.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, ldv-project@linuxtesting.org, Julia Lawall , sil2review@lists.osadl.org Subject: [PATCH] ASoC: rockchip: put device_node on remove Date: Sun, 10 Jun 2018 01:20:54 +0300 Message-Id: <1528582854-8402-1-git-send-email-khoroshilov@ispras.ru> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org snd_rk_mc_probe() gets a couple of device nodes with of_parse_phandle(), but there is no release of them. The patch adds remove handler and proper error handling in the probe. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov --- sound/soc/rockchip/rockchip_rt5645.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/sound/soc/rockchip/rockchip_rt5645.c b/sound/soc/rockchip/rockchip_rt5645.c index 4db4fd56db35..881c32498808 100644 --- a/sound/soc/rockchip/rockchip_rt5645.c +++ b/sound/soc/rockchip/rockchip_rt5645.c @@ -181,7 +181,8 @@ static int snd_rk_mc_probe(struct platform_device *pdev) if (!rk_dailink.cpu_of_node) { dev_err(&pdev->dev, "Property 'rockchip,i2s-controller' missing or invalid\n"); - return -EINVAL; + ret = -EINVAL; + goto put_codec_of_node; } rk_dailink.platform_of_node = rk_dailink.cpu_of_node; @@ -190,17 +191,36 @@ static int snd_rk_mc_probe(struct platform_device *pdev) if (ret) { dev_err(&pdev->dev, "Soc parse card name failed %d\n", ret); - return ret; + goto put_cpu_of_node; } ret = devm_snd_soc_register_card(&pdev->dev, card); if (ret) { dev_err(&pdev->dev, "Soc register card failed %d\n", ret); - return ret; + goto put_cpu_of_node; } return ret; + +put_cpu_of_node: + of_node_put(rk_dailink.cpu_of_node); + rk_dailink.cpu_of_node = NULL; +put_codec_of_node: + of_node_put(rk_dailink.codec_of_node); + rk_dailink.codec_of_node = NULL; + + return ret; +} + +static int snd_rk_mc_remove(struct platform_device *pdev) +{ + of_node_put(rk_dailink.cpu_of_node); + rk_dailink.cpu_of_node = NULL; + of_node_put(rk_dailink.codec_of_node); + rk_dailink.codec_of_node = NULL; + + return 0; } static const struct of_device_id rockchip_rt5645_of_match[] = { @@ -212,6 +232,7 @@ MODULE_DEVICE_TABLE(of, rockchip_rt5645_of_match); static struct platform_driver snd_rk_mc_driver = { .probe = snd_rk_mc_probe, + .remove = snd_rk_mc_remove, .driver = { .name = DRV_NAME, .pm = &snd_soc_pm_ops, -- 2.7.4