All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: Ioan Nicu <ioan.nicu.ext@nsn.com>,
	Alexander Sverdlin <alexander.sverdlin@nsn.com>,
	Grant Likely <grant.likely@secretlab.ca>,
	Rob Herring <robherring2@gmail.com>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Matt Porter <matt.porter@linaro.org>,
	Koen Kooi <koen@dominion.thruhere.net>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Alison Chaiken <Alison_Chaiken@mentor.com>,
	Dinh Nguyen <dinh.linux@gmail.com>, Jan Lubbe <jluebbe@lasnet.de>,
	Michael Stickel <ms@mycable.de>,
	Dirk Behme <dirk.behme@gmail.com>,
	Alan Tull <delicious.quinoa@gmail.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Michael Bohan <mbohan@codeaurora.org>,
	Michal Simek <monstr@monstr.eu>,
	Matt Ranostay <mranostay@gmail.com>,
	Joel Becker <jlbec@evilplan.org>,
	devicetree@vger.kernel.org, Wolfram Sang <wsa@the-dreams.de>,
	linux-i2c@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org,
	Pete Popov <pete.popov@konsulko.com>,
	Dan Malek <dan.malek@konsulko.com>,
	Georgi Vlaev <georgi.vlaev@konsulko.com>
Subject: Re: [PATCH 5/6] OF: Utility helper functions for dynamic nodes
Date: Tue, 24 Jun 2014 12:08:23 +0300	[thread overview]
Message-ID: <F23F6108-A3BE-47CB-B545-4F40520979BF@konsulko.com> (raw)
In-Reply-To: <53A8848A.3000803@roeck-us.net>

Hi Guenter,

On Jun 23, 2014, at 10:48 PM, Guenter Roeck wrote:

> On 06/23/2014 12:13 PM, Pantelis Antoniou wrote:
>> Hi Ioan,
>> 
>> I'm going to let Grant answer that but the code in question doesn't look right.
>> 
>> On Jun 23, 2014, at 9:33 PM, Ioan Nicu wrote:
>> 
>>> Hi Pantelis,
>>> 
>>> On Mon, Jun 23, 2014 at 07:57:24PM +0300, ext Pantelis Antoniou wrote:
>>>> Hi Alexander,
>>>> 
>>>> On Jun 23, 2014, at 7:26 PM, Alexander Sverdlin wrote:
>>>> 
>>>>> Hello Pantelis!
>>>>> 
>>>>> On 22/06/14 11:40, ext Pantelis Antoniou wrote:
>>>>>> Introduce helper functions for working with the live DT tree,
>>>>>> all of them related to dynamically adding/removing nodes and
>>>>>> properties.
>>>>>> 
>>>>>> __of_copy_property() copies a property dynamically
>>>>>> __of_create_empty_node() creates an empty node
>>>>>> 
>>>>>> Bug fix about prop->len == 0 by Ionut Nicu <ioan.nicu.ext@nsn.com>
>>>>> 
>>>>> Are you sure about this? (see below...)
>>>>> 
>>> 
>>> Alexander is right, my fix was lost even though it's mentioned in this patch.
>>> 
>> 
>> I'm sorry, I didn't understand that the intention of the fix was to address
>> the issue below.
>> 
>>>>>> Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
>>>>>> ---
>>>> 
>>>> [snip]
>>>>>> +
>>>>>> +	if (prop->length > 0) {
>>>>>       ^^^^^^^^^^^^^^^^^^^^^
>>>>> Seems, that length==0 case will still produce value==NULL results,
>>>>> which will brake some checks in the kernel... Or am I missing something in
>>>>> the new version?
>>>>> 
>>>> 
>>>> prop->value will be set to NULL, and length will be set to zero (kzalloc).
>>>> This is a normal zero length property.
>>>> 
>>>> I don't know of any place in the kernel accessing the value if prop->length==0
>>>> 
>>> 
>>> We have a simple use case. We have an overlay which adds an interrupt controller.
>>> If you look in drivers/of/irq.c, in of_irq_parse_raw():
>>> 
>>> [...]
>>> 	/* Now start the actual "proper" walk of the interrupt tree */
>>> 	while (ipar != NULL) {
>>> 		/* Now check if cursor is an interrupt-controller and if it is
>>> 		 * then we are done
>>> 		 */
>>> 		if (of_get_property(ipar, "interrupt-controller", NULL) !=
>>> 				NULL) {
>>> 			pr_debug(" -> got it !\n");
>>> 			return 0;
>>> 		}
>>> [...]
>>> 
>>> A node is identified as an interrupt controller if it has a zero-length property
>>> called "interrupt-controller" but with a non-NULL value.
>>> 
>>> My proposed fix for this was to remove the if () condition. propn->value will be
>>> allocated with kmalloc(0) which returns ZERO_SIZE_PTR which is != NULL.
>>> 
>> 
>> If that's the case, the code in irq.c is wrong.
>> 
>> interrupt-controller is a bool property; the correct call to use is of_property_read_bool()
>> which returns true or false when the value is defined.
>> 
>> The use of of_get_property is a bug here. It is perfectly valid for a property to have a
>> NULL value when length = 0.
>> 
> 
> That usage is spread throughout the code though. There are three or four similar checks
> for interrupt-controller in the code, and many others using of_get_property() to check
> for booleans.
> 
> Some examples:
> 	s5m8767,pmic-buck2-ramp-enable
> 	s5m8767,pmic-buck3-ramp-enable
> 	s5m8767,pmic-buck4-ramp-enable
> 	d7s-flipped?
> 	atmel,use-dma-rx
> 	linux,rs485-enabled-at-boot-time
> 	marvell,enable-port1 (and many others)
> 	linux,bootx-noscreen
> 	linux,opened
> 
> and many many others.
> 
> Maybe people meant to use of_find_property() ?
> 

I bet... I see a lot of users doing if (of_get_property()).

Which is no good.


> Either case, if the new code depends on proper use of of_get_property(), we may have
> a problem unless all those bad use cases are fixed.
> 

I have prepared a patch that fixes the caller problem, and issues a warning, so that we
know what we have to fix.

> Guenter

Regards

-- Pantelis

  parent reply	other threads:[~2014-06-24  9:08 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-22  9:40 [PATCH 0/6] OF: Fixes preparing transactions/overlays Pantelis Antoniou
2014-06-22  9:40 ` [PATCH 1/6] of: Do not free memory at of_node_release Pantelis Antoniou
2014-06-24 14:10   ` Grant Likely
2014-06-24 14:23     ` Pantelis Antoniou
2014-06-24 20:21       ` Grant Likely
2014-06-24 20:23         ` Pantelis Antoniou
2014-06-24 20:33           ` Guenter Roeck
2014-06-24 21:02             ` Pantelis Antoniou
2014-06-24 23:20               ` Guenter Roeck
2014-06-25 19:24           ` Grant Likely
2014-06-24 14:53     ` Guenter Roeck
2014-06-22  9:40 ` [PATCH 2/6] OF: Add [__]of_find_node_by_full_name Pantelis Antoniou
2014-06-23 17:58   ` Guenter Roeck
2014-06-23 18:00     ` Pantelis Antoniou
2014-06-24 13:55       ` Grant Likely
2014-06-24 13:55         ` Grant Likely
2014-06-24 13:55         ` Grant Likely
2014-06-24 14:12   ` Grant Likely
2014-06-24 14:23     ` Pantelis Antoniou
2014-06-22  9:40 ` [PATCH 3/6] of: platform: Fix and export of_platform_device_destroy Pantelis Antoniou
2014-06-24 14:23   ` Grant Likely
2014-06-24 15:13   ` Grant Likely
2014-06-22  9:40 ` [PATCH 4/6] OF: Export a number of __of_* methods Pantelis Antoniou
2014-06-24 19:27   ` Grant Likely
2014-06-24 19:38     ` Pantelis Antoniou
2014-06-24 20:19       ` Grant Likely
2014-06-22  9:40 ` [PATCH 5/6] OF: Utility helper functions for dynamic nodes Pantelis Antoniou
2014-06-23 16:26   ` Alexander Sverdlin
2014-06-23 16:26     ` Alexander Sverdlin
2014-06-23 16:26     ` Alexander Sverdlin
2014-06-23 16:57     ` Pantelis Antoniou
2014-06-23 18:33       ` Ioan Nicu
2014-06-23 19:13         ` Pantelis Antoniou
2014-06-23 19:48           ` Guenter Roeck
2014-06-23 19:48             ` Guenter Roeck
2014-06-23 19:48             ` Guenter Roeck
2014-06-23 20:39             ` Ioan Nicu
2014-06-24  9:08             ` Pantelis Antoniou [this message]
2014-06-24 13:46               ` Rob Herring
2014-06-24 13:53                 ` Alexander Sverdlin
2014-06-24 14:49                   ` Rob Herring
2014-06-24 15:43                     ` Alexander Sverdlin
2014-06-24 15:59                       ` Pantelis Antoniou
2014-06-24 18:23                         ` Ioan Nicu
2014-06-24 18:31                           ` Ioan Nicu
2014-06-24 18:43                           ` Pantelis Antoniou
2014-06-24  8:12           ` Alexander Sverdlin
2014-06-24  8:12             ` Alexander Sverdlin
2014-06-24  8:12             ` Alexander Sverdlin
2014-06-24  8:19             ` Pantelis Antoniou
2014-06-24  8:38               ` Alexander Sverdlin
2014-06-24  8:54                 ` Pantelis Antoniou
2014-06-24  9:00                   ` Alexander Sverdlin
2014-06-24  9:09                     ` Pantelis Antoniou
2014-06-24  8:10         ` Alexander Sverdlin
2014-06-24  8:10           ` Alexander Sverdlin
2014-06-24  8:10           ` Alexander Sverdlin
2014-06-25  9:09           ` Grant Likely
2014-06-25  9:09             ` Grant Likely
2014-06-25  9:09             ` Grant Likely
2014-06-25 11:14   ` Grant Likely
2014-06-25 11:22     ` Pantelis Antoniou
2014-06-22  9:40 ` [PATCH 6/6] of: Introduce tree change __foo_post methods Pantelis Antoniou

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=F23F6108-A3BE-47CB-B545-4F40520979BF@konsulko.com \
    --to=pantelis.antoniou@konsulko.com \
    --cc=Alison_Chaiken@mentor.com \
    --cc=alexander.sverdlin@nsn.com \
    --cc=broonie@kernel.org \
    --cc=dan.malek@konsulko.com \
    --cc=delicious.quinoa@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dinh.linux@gmail.com \
    --cc=dirk.behme@gmail.com \
    --cc=georgi.vlaev@konsulko.com \
    --cc=grant.likely@secretlab.ca \
    --cc=gregkh@linuxfoundation.org \
    --cc=ioan.nicu.ext@nsn.com \
    --cc=jlbec@evilplan.org \
    --cc=jluebbe@lasnet.de \
    --cc=koen@dominion.thruhere.net \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=matt.porter@linaro.org \
    --cc=mbohan@codeaurora.org \
    --cc=monstr@monstr.eu \
    --cc=mranostay@gmail.com \
    --cc=ms@mycable.de \
    --cc=pete.popov@konsulko.com \
    --cc=robherring2@gmail.com \
    --cc=s.hauer@pengutronix.de \
    --cc=swarren@wwwdotorg.org \
    --cc=wsa@the-dreams.de \
    /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.