[PATCH 4/4] rtems-debugger-target.c: Fix Coverity Dereference before null check

Chris Johns chrisj at rtems.org
Thu Feb 11 21:28:48 UTC 2021


On 12/2/21 8:16 am, Gedare Bloom wrote:
> On Thu, Feb 11, 2021 at 2:00 PM Chris Johns <chrisj at rtems.org> wrote:
>>
>> On 12/2/21 7:27 am, Ryan Long wrote:
>>> Fixes CID #1468682 where target is dereferenced before it has been
>>> checked as to whether it is null or not in the
>>> rtems_debugger_target_swbreak_control function.
>>> ---
>>>  cpukit/libdebugger/rtems-debugger-target.c | 5 +++--
>>>  1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/cpukit/libdebugger/rtems-debugger-target.c b/cpukit/libdebugger/rtems-debugger-target.c
>>> index e495170..3726a6c 100644
>>> --- a/cpukit/libdebugger/rtems-debugger-target.c
>>> +++ b/cpukit/libdebugger/rtems-debugger-target.c
>>> @@ -171,17 +171,18 @@ int
>>>  rtems_debugger_target_swbreak_control(bool insert, DB_UINT addr, DB_UINT kind)
>>>  {
>>>    rtems_debugger_target*         target = rtems_debugger->target;
>>> -  rtems_debugger_target_swbreak* swbreaks = target->swbreaks.block;
>>>    size_t                         swbreak_size;
>>>    uint8_t*                       loc = (void*) addr;
>>>    size_t                         i;
>>>    int                            r;
>>>
>>> -  if (target == NULL || swbreaks == NULL || kind != target->breakpoint_size) {
>>> +  if (target == NULL || target->swbreaks.block == NULL ||
>>> +      kind != target->breakpoint_size) {
>>>      errno = EIO;
>>>      return -1;
>>>    }
>>>
>>> +  rtems_debugger_target_swbreak* swbreaks = target->swbreaks.block;
>>
>> The debug server does not declare local vars in the body of functions. I would
>> prefer the this code base stays that way if that is OK?
>>
> Good catch. This is a holdover from ANSI C that we should generally
> adhere to in RTEMS cpukit code for historical reasons.

Yes I agree. I understand and accept this is a personal thing and I stated my
preference in the other post.

I use this feature judicially in C++ where I think it is more important to do
so. In C++ a variable can be declared in a number of ways and places and I feel
being consistent aids readability. Compilers are smart enough to figure out when
a variable become active and we do not need to help.

Chris


More information about the devel mailing list