On 27.08.2018 16:57, Baeuerle, Florian wrote:
> Hello Oleg,

Hi Florian,

> 
> You are right, it works only if the property does not already exist.
> In that case we'd probably also need a free() in the else-branch,
> where of_new_property is called (otherwise we have a leak), because
> that actually copies what is contained in data.

You are right, too. Sorry missed this path. V2 is comming soon...

> 
> Sorry for that regression.

No problem :-)

> Best Regards
> Florian

Regards
Oleg

> 
> Am Montag, den 27.08.2018, 13:57 +0000 schrieb [email protected]:
>> With commit 748d1b8 the function do_of_property_set_now is introduced. With 
>> this
>> commit an unwanted free(data) is added wich leads to that an free on the 
>> value
>> is done that is previously set to the property. As a consequence the command
>> of_dump reads freed data an printis the value as hex. Fix this by moving
>> free(data) to the right place like before the above commit.
>>
>> Signed-off-by: Oleg Karfich <[email protected]>
>> ---
>>  commands/of_property.c | 7 ++++---
>>  1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/commands/of_property.c b/commands/of_property.c
>> index 8ce12e5..ea32e51 100644
>> --- a/commands/of_property.c
>> +++ b/commands/of_property.c
>> @@ -275,10 +275,12 @@ static int do_of_property_set_now(struct device_node 
>> *root, const char *path,
>>              pp->value_const = NULL;
>>  
>>              /* limit property data to the actual size */
>> -            if (len)
>> +            if (len) {
>>                      pp->value = xrealloc(data, len);
>> -            else
>> +            } else {
>>                      pp->value = NULL;
>> +                    free(data);
>> +            }
>>  
>>              pp->length = len;
>>      } else {
>> @@ -374,7 +376,6 @@ static int do_of_property(int argc, char *argv[])
>>                              free(data);
>>              } else {
>>                      ret = do_of_property_set_now(NULL, path, propname, 
>> data, len);
>> -                    free(data);
>>              }
>>  
>>              return ret;
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to