Received: by 2002:a05:6a10:6006:0:0:0:0 with SMTP id w6csp492820pxa; Thu, 27 Aug 2020 07:51:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwxNtMhkILg00DLHiPvAU3lGHQaXZYJ6tghI9a3z+0f56FzKWGNerPdOI1owjVC3X7MPr+o X-Received: by 2002:a17:906:3547:: with SMTP id s7mr18020848eja.373.1598539918595; Thu, 27 Aug 2020 07:51:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598539918; cv=none; d=google.com; s=arc-20160816; b=iIQGa0xorbCVc1CcszjSPqO+Ce1CCUwX7Ttkmsv4wFNJ45tATO3p80CPfoIKQ7yJau KD9zdptwwLdpn2sgsKFDQX+L/4hahhO62+tgUvHgtvxkERkvhNC0aarSH8C8CJnuv9CW Tuy8zy5kxmS930P17FDw9ueWmwwdWyOriQJIaDymGoJOoQHtTDRgd99QamOB9GZL5tdk 3ssFYO+2aShZBb+EeVmTsUjCQWY0bvlm1KKUixKOdwkbF3YhyJoWAGqGdZcAAetN8ptj oDkZdPlBQKXOo/lp28g+1bauITCTLVr19ri4AzGm7AdRJr/RWi0+5HPa36sIWGgMZdXa ArrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:user-agent:references :in-reply-to:subject:cc:to:from:date:content-transfer-encoding :mime-version:dkim-signature; bh=ujDW/jNP+61A0PYPvtkz/8DAoim6XC2sClxv9z4Zaxo=; b=z9ScmtxK02WFUgIh+SSbBA0EcTZmYSIx7XuYfADPmN/KPbsjbUwbrTMNfwFmEOwd4M a0UF2wxpAJvdcedw0kDtRPQW8hoFOoFcrdZArPn3nP68QCJXgJGWsIf7kOil1zFLTZhF 6BAzxwtsbt3mofB3fEde/9A2zFhzlCkXun9bF0+q6LnyWHM4+oqWWtwmJMdJ6xKOgvtV B1QoGw1It3bqY0AL2jXjAojaxht+3cNWos5o0icd9cklTWw5sZUGt0dE0omhph9cT9k8 QiwjLVXEueaRa20uTkfAWkWlDwPCDE/UEJsqZj2+Rz3bsFiTYCXq6a9jlPOQJcsV3lJY hy6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1w65j1kq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ng5si1448817ejb.90.2020.08.27.07.51.36; Thu, 27 Aug 2020 07:51:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1w65j1kq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728013AbgH0OsU (ORCPT + 99 others); Thu, 27 Aug 2020 10:48:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:45686 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728098AbgH0Oqx (ORCPT ); Thu, 27 Aug 2020 10:46:53 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7623922B4B; Thu, 27 Aug 2020 14:46:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598539612; bh=11kjkxrZ1KlShNO5tYEuJppL7eE0J4PVf6jQfEffwII=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=1w65j1kq6Nv6863YjmMUcNZtkuTPLRMzhsPYMSB++HKTCTGAaVVh8d+h5rMWPzAaC ZNnzplqBTYuSTr50a/GnsVGQhhFREL7ttXaDscBTcnfh/S7w5fz65siSCEChvZ5LQu Zo6sy8IVh2Q30SeJRFyFusukvtSqjYv8sfyyMsBs= Received: from disco-boy.misterjones.org ([51.254.78.96] helo=www.loen.fr) by disco-boy.misterjones.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1kBJAw-0079iW-Id; Thu, 27 Aug 2020 15:46:50 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Thu, 27 Aug 2020 15:46:50 +0100 From: Marc Zyngier To: Suman Anna Cc: Lee Jones , Arnd Bergmann , Grzegorz Jaszczyk , David Lechner , Tony Lindgren , linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Roger Quadros , kernel-team@android.com Subject: Re: [RESEND PATCH v2] mfd: syscon: Use a unique name with regmap_config In-Reply-To: <20200727211008.24225-1-s-anna@ti.com> References: <20200727211008.24225-1-s-anna@ti.com> User-Agent: Roundcube Webmail/1.4.8 Message-ID: <0c1feaf91b9d285c1bded488437705da@misterjones.org> X-Sender: maz@kernel.org X-SA-Exim-Connect-IP: 51.254.78.96 X-SA-Exim-Rcpt-To: s-anna@ti.com, lee.jones@linaro.org, arnd@arndb.de, grzegorz.jaszczyk@linaro.org, david@lechnology.com, tony@atomide.com, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rogerq@ti.com, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > 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 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 --- 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...