Message ID | 1544170963-8386-1-git-send-email-hofrat@osadl.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | soc: fsl: guts: us devm_kstrdup_const() for RO data | expand |
On Fri, 2018-12-07 at 09:22 +0100, Nicholas Mc Guire wrote: > devm_kstrdup() may return NULL if internal allocation failed, but > as machine is from the device tree, and thus RO, devm_kstrdup_const() > can be used here, which will only copy the reference. Is it really going to only copy the reference? That would require that is_kernel_rodata(machine) be true, which it shouldn't be since it's not part of the kernel image. -Scott
On Fri, Dec 21, 2018 at 08:29:56PM -0600, Scott Wood wrote: > On Fri, 2018-12-07 at 09:22 +0100, Nicholas Mc Guire wrote: > > devm_kstrdup() may return NULL if internal allocation failed, but > > as machine is from the device tree, and thus RO, devm_kstrdup_const() > > can be used here, which will only copy the reference. > > Is it really going to only copy the reference? That would require that > is_kernel_rodata(machine) be true, which it shouldn't be since it's not part > of the kernel image. > I had tried to figure out what is RO and what not but was not able to determine that - from the discussion it seemed that the assumption of RO is correct though I did not ask if it would satisfy is_kernel_rodata() so that explains the incorrect assertion. see https://lkml.org/lkml/2018/12/6/42 So then the only option is to check the return and cleanup on allocation failure as the orriginal patch proposed. thanks for clearifying this ! hofrat
On Sat, Dec 22, 2018 at 2:02 AM Nicholas Mc Guire <der.herr@hofr.at> wrote: > > On Fri, Dec 21, 2018 at 08:29:56PM -0600, Scott Wood wrote: > > On Fri, 2018-12-07 at 09:22 +0100, Nicholas Mc Guire wrote: > > > devm_kstrdup() may return NULL if internal allocation failed, but > > > as machine is from the device tree, and thus RO, devm_kstrdup_const() > > > can be used here, which will only copy the reference. > > > > Is it really going to only copy the reference? That would require that > > is_kernel_rodata(machine) be true, which it shouldn't be since it's not part > > of the kernel image. > > > I had tried to figure out what is RO and what not but was not > able to determine that - from the discussion it seemed that the > assumption of RO is correct though I did not ask if it would > satisfy is_kernel_rodata() so that explains the incorrect assertion. > see https://lkml.org/lkml/2018/12/6/42 > So then the only option is to check the return and cleanup > on allocation failure as the orriginal patch proposed. Thanks for the good discussion. I will drop the previous patch. But would it also be good to just have "soc_dev_attr.machine = machine" directly? Regards, Leo
On Thu, Jan 10, 2019 at 01:43:01PM -0600, Li Yang wrote: > On Sat, Dec 22, 2018 at 2:02 AM Nicholas Mc Guire <der.herr@hofr.at> wrote: > > > > On Fri, Dec 21, 2018 at 08:29:56PM -0600, Scott Wood wrote: > > > On Fri, 2018-12-07 at 09:22 +0100, Nicholas Mc Guire wrote: > > > > devm_kstrdup() may return NULL if internal allocation failed, but > > > > as machine is from the device tree, and thus RO, devm_kstrdup_const() > > > > can be used here, which will only copy the reference. > > > > > > Is it really going to only copy the reference? That would require that > > > is_kernel_rodata(machine) be true, which it shouldn't be since it's not part > > > of the kernel image. > > > > > I had tried to figure out what is RO and what not but was not > > able to determine that - from the discussion it seemed that the > > assumption of RO is correct though I did not ask if it would > > satisfy is_kernel_rodata() so that explains the incorrect assertion. > > see https://lkml.org/lkml/2018/12/6/42 > > So then the only option is to check the return and cleanup > > on allocation failure as the orriginal patch proposed. > > Thanks for the good discussion. I will drop the previous patch. But > would it also be good to just have "soc_dev_attr.machine = machine" > directly? > I think that the intent is to switch to managed devm API so that the cleanup is handled properly currently you would get "machine" from of_property_read_string_index -> of_property_read_string_helper -> of_find_property which does not do any allocation - so there would actually not be anything to cleanup here - don´t see why your solution would not be suitable given the current API. the only advantage of the devm_kstrdup() is that underlying APIs internal changes would have no effect. thx! hofrat
> -----Original Message----- > From: Nicholas Mc Guire <der.herr@hofr.at> > Sent: Thursday, January 10, 2019 8:44 PM > To: Leo Li <leoyang.li@nxp.com> > Cc: Scott Wood <oss@buserror.net>; linuxppc-dev <linuxppc- > dev@lists.ozlabs.org>; lkml <linux-kernel@vger.kernel.org>; moderated > list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE <linux-arm- > kernel@lists.infradead.org>; Nicholas Mc Guire <hofrat@osadl.org> > Subject: Re: [PATCH] soc: fsl: guts: us devm_kstrdup_const() for RO data > > On Thu, Jan 10, 2019 at 01:43:01PM -0600, Li Yang wrote: > > On Sat, Dec 22, 2018 at 2:02 AM Nicholas Mc Guire <der.herr@hofr.at> > wrote: > > > > > > On Fri, Dec 21, 2018 at 08:29:56PM -0600, Scott Wood wrote: > > > > On Fri, 2018-12-07 at 09:22 +0100, Nicholas Mc Guire wrote: > > > > > devm_kstrdup() may return NULL if internal allocation failed, > > > > > but as machine is from the device tree, and thus RO, > > > > > devm_kstrdup_const() can be used here, which will only copy the > reference. > > > > > > > > Is it really going to only copy the reference? That would require > > > > that > > > > is_kernel_rodata(machine) be true, which it shouldn't be since > > > > it's not part of the kernel image. > > > > > > > I had tried to figure out what is RO and what not but was not able > > > to determine that - from the discussion it seemed that the > > > assumption of RO is correct though I did not ask if it would satisfy > > > is_kernel_rodata() so that explains the incorrect assertion. > > > see > > > > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fl > > > > kml.org%2Flkml%2F2018%2F12%2F6%2F42&data=02%7C01%7Cleoyang.l > i%40 > > > > nxp.com%7Cf72d70a65d1b47f6883808d6776e9d58%7C686ea1d3bc2b4c6fa92c > d99 > > > > c5c301635%7C0%7C1%7C636827714307963102&sdata=xnaO0Y7q%2Byad > Yv8sF > > > VPFtkfllgnwpEIkkTIgw0K%2Fovg%3D&reserved=0 > > > So then the only option is to check the return and cleanup on > > > allocation failure as the orriginal patch proposed. > > > > Thanks for the good discussion. I will drop the previous patch. But > > would it also be good to just have "soc_dev_attr.machine = machine" > > directly? > > > I think that the intent is to switch to managed devm API so that the cleanup is > handled properly currently you would get "machine" from > of_property_read_string_index > -> of_property_read_string_helper > -> of_find_property > which does not do any allocation - so there would actually not be anything to > cleanup here - don´t see why your solution would not be suitable given the > current API. the only advantage of the devm_kstrdup() is that underlying > APIs internal changes would have no effect. Thanks. I will sent out a new version. Regards, Leo
diff --git a/drivers/soc/fsl/guts.c b/drivers/soc/fsl/guts.c index 302e0c8..15071ec 100644 --- a/drivers/soc/fsl/guts.c +++ b/drivers/soc/fsl/guts.c @@ -157,7 +157,8 @@ static int fsl_guts_probe(struct platform_device *pdev) of_property_read_string_index(root, "compatible", 0, &machine); of_node_put(root); if (machine) - soc_dev_attr.machine = devm_kstrdup(dev, machine, GFP_KERNEL); + soc_dev_attr.machine = devm_kstrdup_const(dev, machine, + GFP_KERNEL); svr = fsl_guts_get_svr(); soc_die = fsl_soc_die_match(svr, fsl_soc_die);
devm_kstrdup() may return NULL if internal allocation failed, but as machine is from the device tree, and thus RO, devm_kstrdup_const() can be used here, which will only copy the reference. Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> Fixes: a6fc3b698130 ("soc: fsl: add GUTS driver for QorIQ platforms") --- Problem located by experimental coccinelle script Patch was compile tested with: multi_v7_defconfig (implies FSL_GUTS=y) Patch is against 4.20-rc5 (localversion-next is next-20181207) drivers/soc/fsl/guts.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)