Received: by 2002:a05:6358:53a8:b0:117:f937:c515 with SMTP id z40csp1209552rwe; Fri, 14 Apr 2023 16:36:58 -0700 (PDT) X-Google-Smtp-Source: AKy350Z2UuGD9bK2nmTNp1fNs+GQ8HZ09yLkQzH68QCMyKU3DTg/okWmStQ9t8WIusMaauFa4hrl X-Received: by 2002:a17:902:da84:b0:1a6:9ec2:a48f with SMTP id j4-20020a170902da8400b001a69ec2a48fmr4504876plx.34.1681515417696; Fri, 14 Apr 2023 16:36:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681515417; cv=none; d=google.com; s=arc-20160816; b=UxHdsdpLJZ9adVVGzmwA0jOFRPLhsfypRNeAq0a1CvD8y1W122J0GuFybVzn/7j8zh EFKWvKlSZ8Fgcma3XV9A1BZOAalqCOtq+CSNmpImac+cgZFMAVKOs6qDf2hLmm0G+38H 5Xfkd0MAHqskfS8O1aBTlp+qIUoB7NWMqVCOcBHFSTHihT3vYnSUjSxwAn3+pYoaHAhA Lv8Fd/lv90NlVqPZZ+e7gHlQG3bm/74Dda0NO0B+dQxeISYxFlr0Ubkhvu8FIRf45eDo zITHKfgU/oqwykTmrA9+7yk1vW78Fp6cBd8nK+LkHRl9LsOoQ0FgUu4q4r89RBkW3Wdi ZE+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id; bh=WW2LIG+wiSOzq21bLo5yXyOjeEmahMWF1cqu39XEfqY=; b=tfSF+vUBY7+iuz2oyQM2ELvO9jhx/2iSQa0u+aDs/U07bDKHiefNTsmnfp9I8amU26 nM1jsU1MkA0CUTLaKMIjvvgj+Lid235Ddat8UgVWAKLs0X20h2TZvwTWBMn6i5c/kWOz HHzZpPBrnHrn5BnyAYqRbfI1Ceb2RxkY5W22iGRNXgTfIwhokZNpHXnwM8JFK8Yd5suy kp3As5O55+MYsXe9YZtrJ1JjvxB5cK++OEcYfjmEm3dpSfhmfs5l7+YMLH6QIEDzBVOh opekX0V8wOtrYTZ9O6LVRphssa3MAiqE/xbLNWF8e23NbFcPSIaN82XJPCr806zdAp+O qIzQ== 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 m22-20020a170902bb9600b0019ca3bea310si5397000pls.303.2023.04.14.16.36.44; Fri, 14 Apr 2023 16:36:57 -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 S229651AbjDNXbz (ORCPT + 99 others); Fri, 14 Apr 2023 19:31:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229457AbjDNXby (ORCPT ); Fri, 14 Apr 2023 19:31:54 -0400 Received: from fd01.gateway.ufhost.com (fd01.gateway.ufhost.com [61.152.239.71]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C05BC9; Fri, 14 Apr 2023 16:31:51 -0700 (PDT) Received: from EXMBX165.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX165", Issuer "EXMBX165" (not verified)) by fd01.gateway.ufhost.com (Postfix) with ESMTP id 4341724DB83; Sat, 15 Apr 2023 07:31:47 +0800 (CST) Received: from EXMBX172.cuchost.com (172.16.6.92) by EXMBX165.cuchost.com (172.16.6.75) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Sat, 15 Apr 2023 07:31:47 +0800 Received: from [192.168.0.6] (113.102.16.222) by EXMBX172.cuchost.com (172.16.6.92) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Sat, 15 Apr 2023 07:31:46 +0800 Message-ID: <2aa668e3-d065-7376-5d41-ef855afa8518@starfivetech.com> Date: Sat, 15 Apr 2023 07:31:45 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [PATCH] clk: starfive: Avoid casting iomem pointers To: Xingyu Wu , Stephen Boyd , Michael Turquette CC: , , , Tommaso Merciai , "Emil Renner Berthing" , Conor Dooley References: <20230413205528.4044216-1-sboyd@kernel.org> Content-Language: en-US From: Hal Feng In-Reply-To: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [113.102.16.222] X-ClientProxiedBy: EXCAS064.cuchost.com (172.16.6.24) To EXMBX172.cuchost.com (172.16.6.92) X-YovoleRuleAgent: yovoleflag X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 On Fri, 14 Apr 2023 09:58:47 +0800, Xingyu Wu wrote: > On 2023/4/14 4:55, Stephen Boyd wrote: >> Let's use a wrapper struct for the auxiliary_device made in >> jh7110_reset_controller_register() so that we can stop casting iomem >> pointers. The casts trip up tools like sparse, and make for some awkward >> casts that are largely unnecessary. While we're here, change the >> allocation from devm and actually free the auxiliary_device memory in >> the release function. This avoids any use after free problems where the >> parent device driver is unbound from the device but the >> auxiliuary_device is still in use accessing devm freed memory. >> >> Cc: Tommaso Merciai >> Cc: Emil Renner Berthing >> Cc: Hal Feng >> Cc: Conor Dooley >> Cc: Xingyu Wu >> Fixes: edab7204afe5 ("clk: starfive: Add StarFive JH7110 system clock driver") >> Signed-off-by: Stephen Boyd >> --- >> >> I can take this via clk tree. >> >> drivers/clk/starfive/clk-starfive-jh7110-sys.c | 15 ++++++++++++--- >> drivers/reset/starfive/reset-starfive-jh7110.c | 9 ++++++--- >> include/soc/starfive/reset-starfive-jh71x0.h | 17 +++++++++++++++++ >> 3 files changed, 35 insertions(+), 6 deletions(-) >> create mode 100644 include/soc/starfive/reset-starfive-jh71x0.h >> >> diff --git a/drivers/clk/starfive/clk-starfive-jh7110-sys.c b/drivers/clk/starfive/clk-starfive-jh7110-sys.c >> index 5ec210644e1d..851b93d0f371 100644 >> --- a/drivers/clk/starfive/clk-starfive-jh7110-sys.c >> +++ b/drivers/clk/starfive/clk-starfive-jh7110-sys.c >> @@ -11,6 +11,9 @@ >> #include >> #include >> #include >> +#include >> + >> +#include >> >> #include >> >> @@ -335,26 +338,32 @@ static void jh7110_reset_unregister_adev(void *_adev) >> struct auxiliary_device *adev = _adev; >> >> auxiliary_device_delete(adev); >> + auxiliary_device_uninit(adev); >> } >> >> static void jh7110_reset_adev_release(struct device *dev) >> { >> struct auxiliary_device *adev = to_auxiliary_dev(dev); >> + struct jh71x0_reset_adev *rdev = to_jh71x0_reset_adev(adev); >> >> - auxiliary_device_uninit(adev); >> + kfree(rdev); >> } >> >> int jh7110_reset_controller_register(struct jh71x0_clk_priv *priv, >> const char *adev_name, >> u32 adev_id) >> { >> + struct jh71x0_reset_adev *rdev; >> struct auxiliary_device *adev; >> int ret; >> >> - adev = devm_kzalloc(priv->dev, sizeof(*adev), GFP_KERNEL); >> - if (!adev) >> + rdev = kzalloc(sizeof(*rdev), GFP_KERNEL); >> + if (!rdev) >> return -ENOMEM; >> >> + rdev->base = priv->base; >> + >> + adev = &rdev->adev; >> adev->name = adev_name; >> adev->dev.parent = priv->dev; >> adev->dev.release = jh7110_reset_adev_release; >> diff --git a/drivers/reset/starfive/reset-starfive-jh7110.c b/drivers/reset/starfive/reset-starfive-jh7110.c >> index c1b3a490d951..2d26ae95c8cc 100644 >> --- a/drivers/reset/starfive/reset-starfive-jh7110.c >> +++ b/drivers/reset/starfive/reset-starfive-jh7110.c >> @@ -7,6 +7,8 @@ >> >> #include >> >> +#include >> + >> #include "reset-starfive-jh71x0.h" >> >> #include >> @@ -33,14 +35,15 @@ static int jh7110_reset_probe(struct auxiliary_device *adev, >> const struct auxiliary_device_id *id) >> { >> struct jh7110_reset_info *info = (struct jh7110_reset_info *)(id->driver_data); >> - void __iomem **base = (void __iomem **)dev_get_drvdata(adev->dev.parent); > > Thank you for doing that. BTW, if drop the dev_get_drvdata(), the dev_set_drvdata() should also be dropped. > > diff --git a/drivers/clk/starfive/clk-starfive-jh7110-aon.c b/drivers/clk/starfive/clk-starfive-jh7110-aon.c > index a2799fe8a234..62954eb7b50a 100644 > --- a/drivers/clk/starfive/clk-starfive-jh7110-aon.c > +++ b/drivers/clk/starfive/clk-starfive-jh7110-aon.c > @@ -83,8 +83,6 @@ static int jh7110_aoncrg_probe(struct platform_device *pdev) > if (IS_ERR(priv->base)) > return PTR_ERR(priv->base); > > - dev_set_drvdata(priv->dev, (void *)(&priv->base)); > - > for (idx = 0; idx < JH7110_AONCLK_END; idx++) { > u32 max = jh7110_aonclk_data[idx].max; > struct clk_parent_data parents[4] = {}; > diff --git a/drivers/clk/starfive/clk-starfive-jh7110-sys.c b/drivers/clk/starfive/clk-starfive-jh7110-sys.c > index 5ec210644e1d..0cda33fd47f8 100644 > --- a/drivers/clk/starfive/clk-starfive-jh7110-sys.c > +++ b/drivers/clk/starfive/clk-starfive-jh7110-sys.c > @@ -393,8 +393,6 @@ static int __init jh7110_syscrg_probe(struct platform_device *pdev) > if (IS_ERR(priv->base)) > return PTR_ERR(priv->base); > > - dev_set_drvdata(priv->dev, (void *)(&priv->base)); > - > /* > * These PLL clocks are not actually fixed factor clocks and can be > * controlled by the syscon registers of JH7110. They will be dropped > Hi, Stephen, Thanks for your fix to my previous patches, and I have tested this patch on VisionFive 2 board. As Xingyu said above, I think dev_set_drvdata() should also be dropped in clk-starfive-jh7110-sys.c and clk-starfive-jh7110-aon.c. Best regards, Hal