Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp4345316rwl; Mon, 3 Apr 2023 03:45:05 -0700 (PDT) X-Google-Smtp-Source: AKy350YNrGYUBoWHGl6vdP2AlQNgU724CY4d1QTkL+3mMwfnRrXQFizKGrvFXHsh/3xGzX7EmKaF X-Received: by 2002:a17:906:db0c:b0:947:d3d0:ae1c with SMTP id xj12-20020a170906db0c00b00947d3d0ae1cmr11501396ejb.0.1680518705586; Mon, 03 Apr 2023 03:45:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680518705; cv=none; d=google.com; s=arc-20160816; b=ZzvBS1MJ4Z11+zs46VywQIlKom8htQvsCMZBvFQbCp1LnWX4EO+HlSIjg0Lh5OgNPL RHfW7dSs/Q0aPJooTTJG352TfFd3AZnD9E3e1iD6oes8Ar5zhL/9rNVjwwxZLmRO6OQ8 f3NmoV5rfvZI88iI2/1Tbt2/46YEYxef4RpGgAvf/LCElZbyxH9+sxad6fP5Tf+He0h8 J/i5F1cEyTEzNvAWo4OpTeBvtBcPoX+FoIdvVnEsxjz6MyMxrKOuHNGJxZfU5UKWXRF+ xKb+6LKP+wOgvo42zifS8vEkxFS/9UKaV/PF6imFmvmL97yUaM6kLv4MKR/HUxTNd/VU IITg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=t6XLS59r617m9tj5k/2pybEW7bWVwDqvjV5epULTB+M=; b=ow0hCoTkeiIKUfcwjHcEYlcUSWPWDiYRqr7gN5YkD+Zzppod/4ggqyJRvspspiHBrJ ihdXALtoOKQE39g4/TNIl7Hc/hvw05Eywbq15tCgBCa08F7tSfUzzUQrK9WXnhXVfve0 K2Mw3zFlMbeUS6NUQlCGqWlicBbBf+2fjEmHOkiBerj+tgnRHdKe19vB7UaGdj8nPN2m R+af3SXOlEpSRDsmiY61oNtWOlvtrAd5W6bbaRFXA4TQKsnEJW8ct/UzZK399BZ04WEq RoJ9gf4uGDrRjIvZw/xdIJmiDAHhDPtEX7zgBaQNI+KcHVvHG/xvX8YPdNi5PhXTrSfZ xiYg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l19-20020a1709062a9300b009264a7b19d3si1417888eje.303.2023.04.03.03.44.40; Mon, 03 Apr 2023 03:45:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232146AbjDCKnD (ORCPT + 99 others); Mon, 3 Apr 2023 06:43:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232186AbjDCKmk (ORCPT ); Mon, 3 Apr 2023 06:42:40 -0400 Received: from hust.edu.cn (mail.hust.edu.cn [202.114.0.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F254610264; Mon, 3 Apr 2023 03:42:29 -0700 (PDT) Received: from passwd123-ThinkStation-P920.. ([222.20.94.23]) (user=void0red@hust.edu.cn mech=LOGIN bits=0) by mx1.hust.edu.cn with ESMTP id 333Ad1oW026913-333Ad1oX026913 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 3 Apr 2023 18:39:01 +0800 From: Kang Chen To: dzm91@hust.edu.cn Cc: rafael@kernel.org, daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, daniel@makrotopia.org, rdunlap@infradead.org, bchihi@baylibre.com, henry.yen@mediatek.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, hust-os-kernel-patches@googlegroups.com, void0red@gmail.com, error27@gmail.com, Kang Chen Subject: [PATCH] drivers: thermal: mediatek: fix of_iomap leak in mtk_thermal_probe Date: Mon, 3 Apr 2023 18:38:55 +0800 Message-Id: <20230403103855.3601901-1-void0red@hust.edu.cn> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-FEAS-AUTH-USER: void0red@hust.edu.cn X-Spam-Status: No, score=-0.0 required=5.0 tests=SPF_HELO_PASS,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Smatch reports: 1. mtk_thermal_probe() warn: 'apmixed_base' from of_iomap() not released. 2. mtk_thermal_probe() warn: 'auxadc_base' from of_iomap() not released. The original code forgets to release iomap resource when handling errors, fix it through unified error handling code at the end of mtk_thermal_probe. Fixes: 89945047b166 ("thermal: mediatek: Add tsensor support for V2 thermal system") Signed-off-by: Kang Chen --- I think the this should be released on the success path but I was too scared of breaking things. Let me know and I will resend if people want me to do that. drivers/thermal/mediatek/auxadc_thermal.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c index ab730f9552d0..741c7d8151bd 100644 --- a/drivers/thermal/mediatek/auxadc_thermal.c +++ b/drivers/thermal/mediatek/auxadc_thermal.c @@ -1149,13 +1149,15 @@ static int mtk_thermal_probe(struct platform_device *pdev) if (auxadc_phys_base == OF_BAD_ADDR) { dev_err(&pdev->dev, "Can't get auxadc phys address\n"); - return -EINVAL; + ret = -EINVAL; + goto err_iounmap_auxadc; } apmixedsys = of_parse_phandle(np, "mediatek,apmixedsys", 0); if (!apmixedsys) { dev_err(&pdev->dev, "missing apmixedsys node\n"); - return -ENODEV; + ret = -ENODEV; + goto err_iounmap_auxadc; } apmixed_base = of_iomap(apmixedsys, 0); @@ -1165,17 +1167,18 @@ static int mtk_thermal_probe(struct platform_device *pdev) if (apmixed_phys_base == OF_BAD_ADDR) { dev_err(&pdev->dev, "Can't get auxadc phys address\n"); - return -EINVAL; + ret = -EINVAL; + goto err_iounmap_apmixed; } ret = device_reset_optional(&pdev->dev); if (ret) - return ret; + goto err_iounmap_apmixed; ret = clk_prepare_enable(mt->clk_auxadc); if (ret) { dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret); - return ret; + goto err_iounmap_apmixed; } ret = clk_prepare_enable(mt->clk_peri_therm); @@ -1220,7 +1223,10 @@ static int mtk_thermal_probe(struct platform_device *pdev) clk_disable_unprepare(mt->clk_peri_therm); err_disable_clk_auxadc: clk_disable_unprepare(mt->clk_auxadc); - +err_iounmap_apmixed: + iounmap(apmixed_base); +err_iounmap_auxadc: + iounmap(auxadc_base); return ret; } -- 2.34.1