All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Norris <briannorris@chromium.org>
To: MyungJoo Ham <myungjoo.ham@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	Rob Herring <robh+dt@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	Lin Huang <hl@rock-chips.com>,
	linux-arm-kernel@lists.infradead.org,
	Derek Basehore <dbasehore@chromium.org>,
	devicetree@vger.kernel.org, linux-pm@vger.kernel.org,
	Heiko Stuebner <heiko@sntech.de>,
	Brian Norris <briannorris@chromium.org>
Subject: [PATCH v2 15/15] PM / devfreq: rk3399_dmc: Avoid static (reused) profile
Date: Thu, 27 Jan 2022 15:07:26 -0800	[thread overview]
Message-ID: <20220127150615.v2.15.I8d71e9555aca1fa7e532d22dd1ef27976f21799d@changeid> (raw)
In-Reply-To: <20220127230727.3369358-1-briannorris@chromium.org>

This static struct can get reused if the device gets removed/reprobed,
and that causes use-after-free in its ->freq_table.

Let's just move the struct to our dynamic allocation.

Signed-off-by: Brian Norris <briannorris@chromium.org>
---

Changes in v2:
 - New patch

 drivers/devfreq/rk3399_dmc.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/devfreq/rk3399_dmc.c b/drivers/devfreq/rk3399_dmc.c
index 9615658d04ae..e494d1497d60 100644
--- a/drivers/devfreq/rk3399_dmc.c
+++ b/drivers/devfreq/rk3399_dmc.c
@@ -38,6 +38,7 @@
 struct rk3399_dmcfreq {
 	struct device *dev;
 	struct devfreq *devfreq;
+	struct devfreq_dev_profile profile;
 	struct devfreq_simple_ondemand_data ondemand_data;
 	struct clk *dmc_clk;
 	struct devfreq_event_dev *edev;
@@ -228,13 +229,6 @@ static int rk3399_dmcfreq_get_cur_freq(struct device *dev, unsigned long *freq)
 	return 0;
 }
 
-static struct devfreq_dev_profile rk3399_devfreq_dmc_profile = {
-	.polling_ms	= 200,
-	.target		= rk3399_dmcfreq_target,
-	.get_dev_status	= rk3399_dmcfreq_get_dev_status,
-	.get_cur_freq	= rk3399_dmcfreq_get_cur_freq,
-};
-
 static __maybe_unused int rk3399_dmcfreq_suspend(struct device *dev)
 {
 	struct rk3399_dmcfreq *dmcfreq = dev_get_drvdata(dev);
@@ -422,10 +416,16 @@ static int rk3399_dmcfreq_probe(struct platform_device *pdev)
 	data->volt = dev_pm_opp_get_voltage(opp);
 	dev_pm_opp_put(opp);
 
-	rk3399_devfreq_dmc_profile.initial_freq = data->rate;
+	data->profile = (struct devfreq_dev_profile) {
+		.polling_ms	= 200,
+		.target		= rk3399_dmcfreq_target,
+		.get_dev_status	= rk3399_dmcfreq_get_dev_status,
+		.get_cur_freq	= rk3399_dmcfreq_get_cur_freq,
+		.initial_freq	= data->rate,
+	};
 
 	data->devfreq = devm_devfreq_add_device(dev,
-					   &rk3399_devfreq_dmc_profile,
+					   &data->profile,
 					   DEVFREQ_GOV_SIMPLE_ONDEMAND,
 					   &data->ondemand_data);
 	if (IS_ERR(data->devfreq)) {
-- 
2.35.0.rc0.227.g00780c9af4-goog


WARNING: multiple messages have this Message-ID (diff)
From: Brian Norris <briannorris@chromium.org>
To: MyungJoo Ham <myungjoo.ham@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	Rob Herring <robh+dt@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	Lin Huang <hl@rock-chips.com>,
	linux-arm-kernel@lists.infradead.org,
	Derek Basehore <dbasehore@chromium.org>,
	devicetree@vger.kernel.org, linux-pm@vger.kernel.org,
	Heiko Stuebner <heiko@sntech.de>,
	Brian Norris <briannorris@chromium.org>
Subject: [PATCH v2 15/15] PM / devfreq: rk3399_dmc: Avoid static (reused) profile
Date: Thu, 27 Jan 2022 15:07:26 -0800	[thread overview]
Message-ID: <20220127150615.v2.15.I8d71e9555aca1fa7e532d22dd1ef27976f21799d@changeid> (raw)
In-Reply-To: <20220127230727.3369358-1-briannorris@chromium.org>

This static struct can get reused if the device gets removed/reprobed,
and that causes use-after-free in its ->freq_table.

Let's just move the struct to our dynamic allocation.

Signed-off-by: Brian Norris <briannorris@chromium.org>
---

Changes in v2:
 - New patch

 drivers/devfreq/rk3399_dmc.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/devfreq/rk3399_dmc.c b/drivers/devfreq/rk3399_dmc.c
index 9615658d04ae..e494d1497d60 100644
--- a/drivers/devfreq/rk3399_dmc.c
+++ b/drivers/devfreq/rk3399_dmc.c
@@ -38,6 +38,7 @@
 struct rk3399_dmcfreq {
 	struct device *dev;
 	struct devfreq *devfreq;
+	struct devfreq_dev_profile profile;
 	struct devfreq_simple_ondemand_data ondemand_data;
 	struct clk *dmc_clk;
 	struct devfreq_event_dev *edev;
@@ -228,13 +229,6 @@ static int rk3399_dmcfreq_get_cur_freq(struct device *dev, unsigned long *freq)
 	return 0;
 }
 
-static struct devfreq_dev_profile rk3399_devfreq_dmc_profile = {
-	.polling_ms	= 200,
-	.target		= rk3399_dmcfreq_target,
-	.get_dev_status	= rk3399_dmcfreq_get_dev_status,
-	.get_cur_freq	= rk3399_dmcfreq_get_cur_freq,
-};
-
 static __maybe_unused int rk3399_dmcfreq_suspend(struct device *dev)
 {
 	struct rk3399_dmcfreq *dmcfreq = dev_get_drvdata(dev);
@@ -422,10 +416,16 @@ static int rk3399_dmcfreq_probe(struct platform_device *pdev)
 	data->volt = dev_pm_opp_get_voltage(opp);
 	dev_pm_opp_put(opp);
 
-	rk3399_devfreq_dmc_profile.initial_freq = data->rate;
+	data->profile = (struct devfreq_dev_profile) {
+		.polling_ms	= 200,
+		.target		= rk3399_dmcfreq_target,
+		.get_dev_status	= rk3399_dmcfreq_get_dev_status,
+		.get_cur_freq	= rk3399_dmcfreq_get_cur_freq,
+		.initial_freq	= data->rate,
+	};
 
 	data->devfreq = devm_devfreq_add_device(dev,
-					   &rk3399_devfreq_dmc_profile,
+					   &data->profile,
 					   DEVFREQ_GOV_SIMPLE_ONDEMAND,
 					   &data->ondemand_data);
 	if (IS_ERR(data->devfreq)) {
-- 
2.35.0.rc0.227.g00780c9af4-goog


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

WARNING: multiple messages have this Message-ID (diff)
From: Brian Norris <briannorris@chromium.org>
To: MyungJoo Ham <myungjoo.ham@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	Rob Herring <robh+dt@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	Lin Huang <hl@rock-chips.com>,
	linux-arm-kernel@lists.infradead.org,
	Derek Basehore <dbasehore@chromium.org>,
	devicetree@vger.kernel.org, linux-pm@vger.kernel.org,
	Heiko Stuebner <heiko@sntech.de>,
	Brian Norris <briannorris@chromium.org>
Subject: [PATCH v2 15/15] PM / devfreq: rk3399_dmc: Avoid static (reused) profile
Date: Thu, 27 Jan 2022 15:07:26 -0800	[thread overview]
Message-ID: <20220127150615.v2.15.I8d71e9555aca1fa7e532d22dd1ef27976f21799d@changeid> (raw)
In-Reply-To: <20220127230727.3369358-1-briannorris@chromium.org>

This static struct can get reused if the device gets removed/reprobed,
and that causes use-after-free in its ->freq_table.

Let's just move the struct to our dynamic allocation.

Signed-off-by: Brian Norris <briannorris@chromium.org>
---

Changes in v2:
 - New patch

 drivers/devfreq/rk3399_dmc.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/devfreq/rk3399_dmc.c b/drivers/devfreq/rk3399_dmc.c
index 9615658d04ae..e494d1497d60 100644
--- a/drivers/devfreq/rk3399_dmc.c
+++ b/drivers/devfreq/rk3399_dmc.c
@@ -38,6 +38,7 @@
 struct rk3399_dmcfreq {
 	struct device *dev;
 	struct devfreq *devfreq;
+	struct devfreq_dev_profile profile;
 	struct devfreq_simple_ondemand_data ondemand_data;
 	struct clk *dmc_clk;
 	struct devfreq_event_dev *edev;
@@ -228,13 +229,6 @@ static int rk3399_dmcfreq_get_cur_freq(struct device *dev, unsigned long *freq)
 	return 0;
 }
 
-static struct devfreq_dev_profile rk3399_devfreq_dmc_profile = {
-	.polling_ms	= 200,
-	.target		= rk3399_dmcfreq_target,
-	.get_dev_status	= rk3399_dmcfreq_get_dev_status,
-	.get_cur_freq	= rk3399_dmcfreq_get_cur_freq,
-};
-
 static __maybe_unused int rk3399_dmcfreq_suspend(struct device *dev)
 {
 	struct rk3399_dmcfreq *dmcfreq = dev_get_drvdata(dev);
@@ -422,10 +416,16 @@ static int rk3399_dmcfreq_probe(struct platform_device *pdev)
 	data->volt = dev_pm_opp_get_voltage(opp);
 	dev_pm_opp_put(opp);
 
-	rk3399_devfreq_dmc_profile.initial_freq = data->rate;
+	data->profile = (struct devfreq_dev_profile) {
+		.polling_ms	= 200,
+		.target		= rk3399_dmcfreq_target,
+		.get_dev_status	= rk3399_dmcfreq_get_dev_status,
+		.get_cur_freq	= rk3399_dmcfreq_get_cur_freq,
+		.initial_freq	= data->rate,
+	};
 
 	data->devfreq = devm_devfreq_add_device(dev,
-					   &rk3399_devfreq_dmc_profile,
+					   &data->profile,
 					   DEVFREQ_GOV_SIMPLE_ONDEMAND,
 					   &data->ondemand_data);
 	if (IS_ERR(data->devfreq)) {
-- 
2.35.0.rc0.227.g00780c9af4-goog


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2022-01-27 23:09 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-27 23:07 [PATCH v2 00/15] rk3399: Clean up and enable DDR DVFS Brian Norris
2022-01-27 23:07 ` Brian Norris
2022-01-27 23:07 ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 01/15] dt-bindings: devfreq: rk3399_dmc: Convert to YAML Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-02-09 20:17   ` Rob Herring
2022-02-09 20:17     ` Rob Herring
2022-02-09 20:17     ` Rob Herring
2022-03-04 21:23     ` Brian Norris
2022-03-04 21:23       ` Brian Norris
2022-03-04 21:23       ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 02/15] dt-bindings: devfreq: rk3399_dmc: Deprecate unused/redundant properties Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:17   ` Brian Norris
2022-01-27 23:17     ` Brian Norris
2022-01-27 23:17     ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 03/15] dt-bindings: devfreq: rk3399_dmc: Fix Hz units Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-02-04  1:59   ` Chanwoo Choi
2022-02-04  1:59     ` Chanwoo Choi
2022-02-04  1:59     ` Chanwoo Choi
2022-02-09 20:19   ` Rob Herring
2022-02-09 20:19     ` Rob Herring
2022-02-09 20:19     ` Rob Herring
2022-01-27 23:07 ` [PATCH v2 04/15] dt-bindings: devfreq: rk3399_dmc: Specify idle params in nanoseconds Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-02-09 20:21   ` Rob Herring
2022-02-09 20:21     ` Rob Herring
2022-02-09 20:21     ` Rob Herring
2022-01-27 23:07 ` [PATCH v2 05/15] dt-bindings: devfreq: rk3399_dmc: Add more disable-freq properties Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-02-09 20:29   ` Rob Herring
2022-02-09 20:29     ` Rob Herring
2022-02-09 20:29     ` Rob Herring
2022-01-27 23:07 ` [PATCH v2 06/15] PM / devfreq: rk3399_dmc: Drop undocumented ondemand DT props Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 07/15] PM / devfreq: rk3399_dmc: Drop excess timing properties Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 08/15] PM / devfreq: rk3399_dmc: Use bitfield macro definitions for ODT_PD Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 09/15] PM / devfreq: rk3399_dmc: Support new disable-freq properties Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 10/15] PM / devfreq: rk3399_dmc: Support new *-ns properties Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 11/15] arm64: dts: rk3399: Add dfi and dmc nodes Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 12/15] arm64: dts: rockchip: Enable dmc and dfi nodes on gru Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-03-04 14:47   ` Peter Geis
2022-03-04 14:47     ` Peter Geis
2022-03-04 14:47     ` Peter Geis
2022-03-04 20:47     ` Brian Norris
2022-03-04 20:47       ` Brian Norris
2022-03-04 20:47       ` Brian Norris
2022-04-06  2:05     ` Brian Norris
2022-04-06  2:05       ` Brian Norris
2022-04-06  2:05       ` Brian Norris
2022-04-07  0:18       ` Peter Geis
2022-04-07  0:18         ` Peter Geis
2022-04-07  0:18         ` Peter Geis
2022-01-27 23:07 ` [PATCH v2 13/15] PM / devfreq: rk3399_dmc: Disable edev on remove() Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` [PATCH v2 14/15] PM / devfreq: rk3399_dmc: Use devm_pm_opp_of_add_table() Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07   ` Brian Norris
2022-01-27 23:07 ` Brian Norris [this message]
2022-01-27 23:07   ` [PATCH v2 15/15] PM / devfreq: rk3399_dmc: Avoid static (reused) profile Brian Norris
2022-01-27 23:07   ` Brian Norris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220127150615.v2.15.I8d71e9555aca1fa7e532d22dd1ef27976f21799d@changeid \
    --to=briannorris@chromium.org \
    --cc=cw00.choi@samsung.com \
    --cc=dbasehore@chromium.org \
    --cc=devicetree@vger.kernel.org \
    --cc=heiko@sntech.de \
    --cc=hl@rock-chips.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=myungjoo.ham@samsung.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.