[PATCH 2/3] score: Simplify _Objects_Initialize_information()
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Nov 7 09:06:44 UTC 2018
On 07/11/2018 01:11, Chris Johns wrote:
> On 06/11/2018 23:37, Sebastian Huber wrote:
>> There is no need to make the minimum identifier dependent on the maximum
>> per allocation.
>> ---
>> cpukit/score/src/objectinitializeinformation.c | 4 +---
>> 1 file changed, 1 insertion(+), 3 deletions(-)
>>
>> diff --git a/cpukit/score/src/objectinitializeinformation.c b/cpukit/score/src/objectinitializeinformation.c
>> index 23c7819bfa..9905349213 100644
>> --- a/cpukit/score/src/objectinitializeinformation.c
>> +++ b/cpukit/score/src/objectinitializeinformation.c
>> @@ -39,7 +39,6 @@ void _Objects_Do_initialize_information(
>> )
>> {
>> static Objects_Control *null_local_table = NULL;
>> - uint32_t minimum_index;
>> Objects_Maximum maximum_per_allocation;
>>
>> information->the_api = the_api;
>> @@ -88,9 +87,8 @@ void _Objects_Do_initialize_information(
>> /*
>> * Calculate minimum and maximum Id's
>> */
>> - minimum_index = (maximum_per_allocation == 0) ? 0 : 1;
> I am not sure you can remove this line. Something does not feel right, it was
> long ago I wrote the original change and I seem to remember I thought the same
> things and added this code after lots of testing. It may be this is not needed
> with the way the code initialises managers now, I am not sure. What if someone
> pulls in a manager but does not configure any resources?
I added spconfig02 to test managers with a maximum object count of zero.
This change has no impact on the overall test results. I did also a test
run with the realview_pbx_a9_qemu BSP since it catches NULL pointer
accesses.
A potential use case of this
minimum_index = (maximum_per_allocation == 0) ? 0 : 1;
could be in:
Objects_Control *_Objects_Get(
Objects_Id id,
ISR_lock_Context *lock_context,
const Objects_Information *information
)
{
uint32_t index;
index = id - information->minimum_id + 1;
if ( information->maximum >= index ) {
Objects_Control *the_object;
_ISR_lock_ISR_disable( lock_context );
the_object = information->local_table[ index ];
if ( the_object != NULL ) {
/* ISR disabled on behalf of caller */
return the_object;
}
_ISR_lock_ISR_enable( lock_context );
}
return NULL;
}
With a minimum index of 0 you don't end up in the information->maximum >= index case for all indexes 0..65535. This would prevent a NULL pointer access if you do this before the corresponding _Objects_Initialize_information(). No matter how you set minimum_id you can always construct an invalid identifier to end up in this case.
I would like to statically initialize the object information structures in a follow up patch, so this would be no longer an issue.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list