linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Suman Anna <s-anna@ti.com>
Cc: Lee Jones <lee.jones@linaro.org>, Arnd Bergmann <arnd@arndb.de>,
	Grzegorz Jaszczyk <grzegorz.jaszczyk@linaro.org>,
	David Lechner <david@lechnology.com>,
	Tony Lindgren <tony@atomide.com>,
	linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Roger Quadros <rogerq@ti.com>,
	kernel-team@android.com
Subject: Re: [RESEND PATCH v2] mfd: syscon: Use a unique name with regmap_config
Date: Thu, 27 Aug 2020 15:46:50 +0100	[thread overview]
Message-ID: <0c1feaf91b9d285c1bded488437705da@misterjones.org> (raw)
In-Reply-To: <20200727211008.24225-1-s-anna@ti.com>

Hi all,

On 2020-07-27 22:10, Suman Anna wrote:
> The DT node full name is currently being used in regmap_config
> which in turn is used to create the regmap debugfs directories.
> This name however is not guaranteed to be unique and the regmap
> debugfs registration can fail in the cases where the syscon nodes
> have the same unit-address but are present in different DT node
> hierarchies. Replace this logic using the syscon reg resource
> address instead (inspired from logic used while creating platform
> devices) to ensure a unique name is given for each syscon.
> 
> Signed-off-by: Suman Anna <s-anna@ti.com>
> ---
> Hi Arnd,
> Lee is looking for your review on this patch. Can you please
> review and provide your comments.
> 
> This is a resend of the patch that was posted previously, rebased
> now onto latest kernel.
> 
> v2: https://patchwork.kernel.org/patch/11353355/
>  - Fix build warning reported by kbuild test bot
> v1: https://patchwork.kernel.org/patch/11346363/
> 
>  drivers/mfd/syscon.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
> index 3a97816d0cba..75859e492984 100644
> --- a/drivers/mfd/syscon.c
> +++ b/drivers/mfd/syscon.c
> @@ -101,12 +101,14 @@ static struct syscon *of_syscon_register(struct
> device_node *np, bool check_clk)
>  		}
>  	}
> 
> -	syscon_config.name = of_node_full_name(np);
> +	syscon_config.name = kasprintf(GFP_KERNEL, "%pOFn@%llx", np,
> +				       (u64)res.start);
>  	syscon_config.reg_stride = reg_io_width;
>  	syscon_config.val_bits = reg_io_width * 8;
>  	syscon_config.max_register = resource_size(&res) - reg_io_width;
> 
>  	regmap = regmap_init_mmio(NULL, base, &syscon_config);
> +	kfree(syscon_config.name);
>  	if (IS_ERR(regmap)) {
>  		pr_err("regmap init failed\n");
>  		ret = PTR_ERR(regmap);

This patch triggers some illegal memory accesses when debugfs is
enabled, as regmap does rely on config->name to be persistent
when the debugfs registration is deferred via regmap_debugfs_early_list
(__regmap_init() -> regmap_attach_dev() -> regmap_debugfs_init()...),
leading to a KASAN splat on demand.

I came up with the following patch that solves the issue for me.

Thanks,

         M.

 From fd3f5f2bf72df53be18d13914fe349a34f81f16b Mon Sep 17 00:00:00 2001
 From: Marc Zyngier <maz@kernel.org>
Date: Thu, 27 Aug 2020 14:45:34 +0100
Subject: [PATCH] mfd: syscon: Don't free allocated name for 
regmap_config

The name allocated for the regmap_config structure is freed
pretty early, right after the registration of the MMIO region.

Unfortunately, that doesn't follow the life cycle that debugfs
expects, as it can access the name field long after the free
has occured.

Move the free on the error path, and keep it forever otherwise.

Fixes: e15d7f2b81d2 ("mfd: syscon: Use a unique name with 
regmap_config")
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
  drivers/mfd/syscon.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
index 75859e492984..7a660411c562 100644
--- a/drivers/mfd/syscon.c
+++ b/drivers/mfd/syscon.c
@@ -108,7 +108,6 @@ static struct syscon *of_syscon_register(struct 
device_node *np, bool check_clk)
  	syscon_config.max_register = resource_size(&res) - reg_io_width;

  	regmap = regmap_init_mmio(NULL, base, &syscon_config);
-	kfree(syscon_config.name);
  	if (IS_ERR(regmap)) {
  		pr_err("regmap init failed\n");
  		ret = PTR_ERR(regmap);
@@ -145,6 +144,7 @@ static struct syscon *of_syscon_register(struct 
device_node *np, bool check_clk)
  	regmap_exit(regmap);
  err_regmap:
  	iounmap(base);
+	kfree(syscon_config.name);
  err_map:
  	kfree(syscon);
  	return ERR_PTR(ret);
-- 
2.27.0


-- 
Jazz is not dead. It just smells funny...

  parent reply	other threads:[~2020-08-27 14:48 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-27 21:10 [RESEND PATCH v2] mfd: syscon: Use a unique name with regmap_config Suman Anna
2020-07-28  7:44 ` Arnd Bergmann
2020-07-28 15:34   ` Suman Anna
2020-07-28  8:01 ` Lee Jones
2020-08-27 14:46 ` Marc Zyngier [this message]
2020-08-27 18:28   ` Suman Anna
2020-08-27 20:06     ` Marc Zyngier
2020-08-27 20:32       ` Suman Anna
2020-08-28 10:40         ` Mark Brown
2020-09-03  8:26         ` Marc Zyngier
2020-09-03 13:25           ` Suman Anna
2020-09-03 16:04             ` Marc Zyngier

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=0c1feaf91b9d285c1bded488437705da@misterjones.org \
    --to=maz@kernel.org \
    --cc=arnd@arndb.de \
    --cc=david@lechnology.com \
    --cc=grzegorz.jaszczyk@linaro.org \
    --cc=kernel-team@android.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=rogerq@ti.com \
    --cc=s-anna@ti.com \
    --cc=tony@atomide.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).