From: Andrey Smirnov <andrew.smirnov@gmail.com> To: Shawn Guo <shawnguo@kernel.org> Cc: Andrey Smirnov <andrew.smirnov@gmail.com>, Stefan Agner <stefan@agner.ch>, Lucas Stach <l.stach@pengutronix.de>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] soc: imx: gpc: Do not pass static memory as platform data Date: Wed, 10 Jan 2018 08:16:08 -0800 [thread overview] Message-ID: <20180110161608.13015-2-andrew.smirnov@gmail.com> (raw) In-Reply-To: <20180110161608.13015-1-andrew.smirnov@gmail.com> Platform device core assumes the ownership of dev.platform_data as well as that it is dynamically allocated and it will try to kfree it as a part of platform_device_release(). Change the code to pass kzalloc'ed chunk of memory instead of a pointer to a static memory to avoid causing a BUG() when calling platform_device_put(). The problem can be reproduced by artificially enabling the error path of platform_device_add() call (around line 452). Cc: Shawn Guo <shawnguo@kernel.org> Cc: Stefan Agner <stefan@agner.ch> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- This patch is a follow up to fix one of the bugs discussed in lkml.kernel.org/r/3f836677c6e98aaf01bc1ac8c3410083@agner.ch drivers/soc/imx/gpc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/soc/imx/gpc.c b/drivers/soc/imx/gpc.c index 47e7aa963dbb..ec8b79abebac 100644 --- a/drivers/soc/imx/gpc.c +++ b/drivers/soc/imx/gpc.c @@ -18,6 +18,7 @@ #include <linux/pm_domain.h> #include <linux/regmap.h> #include <linux/regulator/consumer.h> +#include <linux/slab.h> #define GPC_CNTR 0x000 @@ -428,13 +429,19 @@ static int imx_gpc_probe(struct platform_device *pdev) if (domain_index >= of_id_data->num_domains) continue; - domain = &imx_gpc_domains[domain_index]; + domain = kzalloc(sizeof(*domain), GFP_KERNEL); + if (!domain) { + of_node_put(np); + return -ENOMEM; + } + memcpy(domain, &imx_gpc_domains[domain_index], sizeof(*domain)); domain->regmap = regmap; domain->ipg_rate_mhz = ipg_rate_mhz; pd_pdev = platform_device_alloc("imx-pgc-power-domain", domain_index); if (!pd_pdev) { + kfree(domain); of_node_put(np); return -ENOMEM; } -- 2.14.3
WARNING: multiple messages have this Message-ID (diff)
From: andrew.smirnov@gmail.com (Andrey Smirnov) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/2] soc: imx: gpc: Do not pass static memory as platform data Date: Wed, 10 Jan 2018 08:16:08 -0800 [thread overview] Message-ID: <20180110161608.13015-2-andrew.smirnov@gmail.com> (raw) In-Reply-To: <20180110161608.13015-1-andrew.smirnov@gmail.com> Platform device core assumes the ownership of dev.platform_data as well as that it is dynamically allocated and it will try to kfree it as a part of platform_device_release(). Change the code to pass kzalloc'ed chunk of memory instead of a pointer to a static memory to avoid causing a BUG() when calling platform_device_put(). The problem can be reproduced by artificially enabling the error path of platform_device_add() call (around line 452). Cc: Shawn Guo <shawnguo@kernel.org> Cc: Stefan Agner <stefan@agner.ch> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: linux-arm-kernel at lists.infradead.org Cc: linux-kernel at vger.kernel.org Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- This patch is a follow up to fix one of the bugs discussed in lkml.kernel.org/r/3f836677c6e98aaf01bc1ac8c3410083 at agner.ch drivers/soc/imx/gpc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/soc/imx/gpc.c b/drivers/soc/imx/gpc.c index 47e7aa963dbb..ec8b79abebac 100644 --- a/drivers/soc/imx/gpc.c +++ b/drivers/soc/imx/gpc.c @@ -18,6 +18,7 @@ #include <linux/pm_domain.h> #include <linux/regmap.h> #include <linux/regulator/consumer.h> +#include <linux/slab.h> #define GPC_CNTR 0x000 @@ -428,13 +429,19 @@ static int imx_gpc_probe(struct platform_device *pdev) if (domain_index >= of_id_data->num_domains) continue; - domain = &imx_gpc_domains[domain_index]; + domain = kzalloc(sizeof(*domain), GFP_KERNEL); + if (!domain) { + of_node_put(np); + return -ENOMEM; + } + memcpy(domain, &imx_gpc_domains[domain_index], sizeof(*domain)); domain->regmap = regmap; domain->ipg_rate_mhz = ipg_rate_mhz; pd_pdev = platform_device_alloc("imx-pgc-power-domain", domain_index); if (!pd_pdev) { + kfree(domain); of_node_put(np); return -ENOMEM; } -- 2.14.3
next prev parent reply other threads:[~2018-01-10 16:16 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-01-10 16:16 [PATCH 1/2] soc: imx: gpcv2: Do not pass static memory as platform data Andrey Smirnov 2018-01-10 16:16 ` Andrey Smirnov 2018-01-10 16:16 ` Andrey Smirnov [this message] 2018-01-10 16:16 ` [PATCH 2/2] soc: imx: gpc: " Andrey Smirnov 2018-01-10 20:49 ` Stefan Agner 2018-01-10 20:49 ` Stefan Agner 2018-01-10 21:50 ` Andrey Smirnov 2018-01-10 21:50 ` Andrey Smirnov
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=20180110161608.13015-2-andrew.smirnov@gmail.com \ --to=andrew.smirnov@gmail.com \ --cc=l.stach@pengutronix.de \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=shawnguo@kernel.org \ --cc=stefan@agner.ch \ /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: linkBe 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.