[PATCH] xilinx: zynqmp: Do not use null as spl bss start address
Stefan Herbrechtsmeier
stefan.herbrechtsmeier-oss at weidmueller.com
Wed Jun 1 16:03:13 CEST 2022
Hi,
Am 01.06.2022 um 14:59 schrieb Michal Simek:
>
>
> On 6/1/22 14:27, Stefan Herbrechtsmeier wrote:
>> Hi,
>>
>> Am 01.06.2022 um 13:59 schrieb Michal Simek:
>>> Hi,
>>>
>>> first of all subject is not accurate. We are not using null as start
>>> but address 0.
>>
>> I will replace null with 0.
>>
>>>
>>> On 6/1/22 12:55, Stefan Herbrechtsmeier wrote:
>>>> [CAUTION: External Email]
>>>>
>>>> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier at weidmueller.com>
>>>>
>>>> Do not use null as address for memory because of the special meaning
>>>> for
>>>> pointers. Change the spl bss start address to the second page.
>>>>
>>>> Signed-off-by: Stefan Herbrechtsmeier
>>>> <stefan.herbrechtsmeier at weidmueller.com>
>>>>
>>>> ---
>>>> The problem was discovered with a static char array initialized with an
>>>> empty string.
>>>
>>> It means your code is doing wrong pointer arithmeticians which
>>> pointed to BSS section and overwrites there something. What is that
>>> code doing?
>>
>> I like to call the zynqmp_get_silicon_idcode_name function from my
>> board code and therefore rework the function to return static memory
>> to avoid a memory allocation on each call.
>>
>> - char name[ZYNQMP_VERSION_SIZE];
>> + static char name[ZYNQMP_VERSION_SIZE] = "";
>
> Try to remove = "".
The = "" is needed to skip the processing on the second run.
> Undefined variables should be placed to bss section.
A = "zu" will also move the variable to an other section.
>
>>
>> + if (name[0])
>> + return name;
>>
>> - return strdup(name);
>> + return name;
>>
>> The name variable gets the address 0 which means that snprintf and
>> strncat do nothing because the dest pointer and NULL are equal.
>
> Ok. I see. It become the first variable in bss section.
Should I resend the patch with null replaced by 0?
Regard
Stefan
More information about the U-Boot
mailing list