[PATCH 1/2] rtl-obj.c: Added an early return if rtl lock fails
Chris Johns
chrisj at rtems.org
Mon Apr 5 23:46:05 UTC 2021
On 5/4/21 11:11 pm, Ryan Long wrote:
> When you say "allocating the main data structure", are you referring to the Run-Time Link Editor (rtl)? If so, rtems_rtl_data_init() is allocating memory for it. If it fails then rtems_rtl_data_init() returns false. Then, this causes rtems_rtl_lock() to return NULL.
I would need to look at this in much more detail to completely resolve what
happens at an architectural level. That is something else to this patch.
>
> -----Original Message-----
> From: Chris Johns <chrisj at rtems.org>
> Sent: Tuesday, March 30, 2021 11:31 PM
> To: Gedare Bloom <gedare at rtems.org>; Ryan Long <ryan.long at oarcorp.com>
> Cc: devel at rtems.org
> Subject: Re: [PATCH 1/2] rtl-obj.c: Added an early return if rtl lock fails
>
> On 31/3/21 4:08 am, Gedare Bloom wrote:
>> This looks ok. I'm wondering however if these rtems_rtl_lock () ever
>> should fail in practice, should it be an assert? Just wondering.
>
> Good question, I cannot remember. Maybe a better solution is to move to a statically allocated lock using the newer interface Sebastian has added and removing the check?
>
> However is the lock also allocating the main data structure and also returning the status of that? I do this as a way of not uses resources until the service is used. If that is the case the change maybe OK but the name of the call is a bit average.
>
> Ryan, are you able to take have a closer look.
>
> Thanks
> Chris
>
>>
>> On Tue, Mar 30, 2021 at 10:58 AM Ryan Long <ryan.long at oarcorp.com> wrote:
>>>
>>> ping
>>>
>>> -----Original Message-----
>>> From: Ryan Long <ryan.long at oarcorp.com>
>>> Sent: Monday, March 22, 2021 12:08 PM
>>> To: devel at rtems.org
>>> Cc: Ryan Long <ryan.long at oarcorp.com>
>>> Subject: [PATCH 1/2] rtl-obj.c: Added an early return if rtl lock
>>> fails
>>>
>>> CID 1444138: Dereference null return value in rtems_rtl_obj_find_file().
>>>
>>> Closes #4332
>>> ---
>>> cpukit/libdl/rtl-obj.c | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>>
>>> diff --git a/cpukit/libdl/rtl-obj.c b/cpukit/libdl/rtl-obj.c index
>>> a7dd740..d5a867e 100644
>>> --- a/cpukit/libdl/rtl-obj.c
>>> +++ b/cpukit/libdl/rtl-obj.c
>>> @@ -409,6 +409,10 @@ rtems_rtl_obj_find_file (rtems_rtl_obj* obj,
>>> const char* name)
>>>
>>> rtl = rtems_rtl_lock ();
>>>
>>> + if (rtl == NULL) {
>>> + return false;
>>> + }
An error should be set here before returning or the caller will not know whhy
that got an error.
>>> +
>>> if (!rtems_rtl_find_file (pname, rtl->paths, &obj->fname, &obj->fsize))
>>> {
>>> rtems_rtl_set_error (ENOENT, "file not found");
Here is an example.
Chris
More information about the devel
mailing list