Fix small bugs in Kernel (#998)

* Fix small bugs

* Cast sizeof to BaseType_t

* Test removing assert to fix UT

* Revert change to tasks.c

Since configIDLE_TASK_NAME must be defined as a string according to
the documentation, the macro will always be NULL terminated. Which
means that the check `if( cIdleName[ xIdleTaskNameIndex ] == ( char ) 0x00 )`
will catch the end of string.

* Update coverity config; Add coverity version; Update pvPortMalloc declaration to match the definitions.

* Add port files to sed command

* Remove warnings about unused parameters in port code

---------

Co-authored-by: Rahul Kar <118818625+kar-rahul-aws@users.noreply.github.com>
pull/991/head
Aniruddha Kanhere 12 months ago committed by GitHub
parent 1a500f1a74
commit 2fcb0f48b1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -2,11 +2,11 @@
FreeRTOS-Kernel conforms to [MISRA C:2012](https://www.misra.org.uk/misra-c)
guidelines, with the deviations listed below. Compliance is checked with
Coverity static analysis. Since the FreeRTOS kernel is designed for
small-embedded devices, it needs to have a very small memory footprint and
has to be efficient. To achieve that and to increase the performance, it
deviates from some MISRA rules. The specific deviations, suppressed inline,
are listed below.
Coverity static analysis version 2023.6.1. Since the FreeRTOS kernel is
designed for small-embedded devices, it needs to have a very small memory
footprint and has to be efficient. To achieve that and to increase the
performance, it deviates from some MISRA rules. The specific deviations,
suppressed inline, are listed below.
Additionally, [MISRA configuration file](examples/coverity/coverity_misra.config)
contains project wide deviations.

@ -2,8 +2,9 @@ cmake_minimum_required(VERSION 3.15)
project(coverity)
set(FREERTOS_KERNEL_PATH "../../")
FILE(GLOB FREERTOS_KERNEL_SOURCE ${FREERTOS_KERNEL_PATH}*.c)
set(FREERTOS_KERNEL_PATH "../..")
FILE(GLOB FREERTOS_KERNEL_SOURCE ${FREERTOS_KERNEL_PATH}/*.c)
FILE(GLOB FREERTOS_PORT_CODE ${FREERTOS_KERNEL_PATH}/portable/template/*.c)
# Coverity incorrectly infers the type of pdTRUE and pdFALSE as boolean because
# of their names. This generates multiple false positive warnings about type
@ -12,8 +13,8 @@ FILE(GLOB FREERTOS_KERNEL_SOURCE ${FREERTOS_KERNEL_PATH}*.c)
# fixes the issue of incorrectly inferring the type of pdTRUE and pdFALSE as
# boolean.
add_custom_target(fix_source ALL
COMMAND sed -i -b -e 's/pdFALSE/pdFAIL/g' -e 's/pdTRUE/pdPASS/g' ${FREERTOS_KERNEL_SOURCE}
DEPENDS ${FREERTOS_KERNEL_SOURCE})
COMMAND sed -i -b -e 's/pdFALSE/pdFAIL/g' -e 's/pdTRUE/pdPASS/g' ${FREERTOS_KERNEL_SOURCE} ${FREERTOS_PORT_CODE}
DEPENDS ${FREERTOS_KERNEL_SOURCE} ${FREERTOS_PORT_CODE})
# Add the freertos_config for FreeRTOS-Kernel.
add_library(freertos_config INTERFACE)

@ -1,97 +1,91 @@
// MISRA C-2012 Rules
{
version : "2.0",
standard : "c2012",
title: "Coverity MISRA Configuration",
deviations : [
// Disable the following rules.
"version" : "2.0",
"standard" : "c2012",
"title": "Coverity MISRA Configuration",
"deviations" : [
{
deviation: "Rule 3.1",
reason: "We post HTTP links in code comments which contain // inside comments blocks."
"deviation": "Rule 3.1",
"reason": "We post HTTP links in code comments which contain // inside comments blocks."
},
{
deviation: "Rule 14.4",
reason: "do while( 0 ) pattern is used in macros to prevent extra semi-colon."
"deviation": "Rule 14.4",
"reason": "do while( 0 ) pattern is used in macros to prevent extra semi-colon."
},
// Disable the following advisory rules and directives.
{
deviation: "Directive 4.4",
reason: "Code snippet is used in comment to help explanation."
"deviation": "Directive 4.4",
"reason": "Code snippet is used in comment to help explanation."
},
{
deviation: "Directive 4.5",
reason: "Allow names that MISRA considers ambiguous."
"deviation": "Directive 4.5",
"reason": "Allow names that MISRA considers ambiguous."
},
{
deviation: "Directive 4.6",
reason: "Allow port to use primitive type with typedefs."
"deviation": "Directive 4.6",
"reason": "Allow port to use primitive type with typedefs."
},
{
deviation: "Directive 4.8",
reason: "HeapRegion_t and HeapStats_t are used only in heap files but declared in portable.h which is included in multiple source files. As a result, these definitions appear in multiple source files where they are not used."
"deviation": "Directive 4.8",
"reason": "HeapRegion_t and HeapStats_t are used only in heap files but declared in portable.h which is included in multiple source files. As a result, these definitions appear in multiple source files where they are not used."
},
{
deviation: "Directive 4.9",
reason: "FreeRTOS-Kernel is optimised to work on small micro-controllers. To achieve that, function-like macros are used."
"deviation": "Directive 4.9",
"reason": "FreeRTOS-Kernel is optimised to work on small micro-controllers. To achieve that, function-like macros are used."
},
{
deviation: "Rule 2.3",
reason: "FreeRTOS defines types which is used in application."
"deviation": "Rule 2.3",
"reason": "FreeRTOS defines types which is used in application."
},
{
deviation: "Rule 2.4",
reason: "Allow to define unused tag."
"deviation": "Rule 2.4",
"reason": "Allow to define unused tag."
},
{
deviation: "Rule 2.5",
reason: "Allow to define unused macro."
"deviation": "Rule 2.5",
"reason": "Allow to define unused macro."
},
{
deviation: "Rule 5.9",
reason: "Allow to define identifier with the same name in structure and global variable."
"deviation": "Rule 5.9",
"reason": "Allow to define identifier with the same name in structure and global variable."
},
{
deviation: "Rule 8.7",
reason: "API functions are not used by the library outside of the files they are defined; however, they must be externally visible in order to be used by an application."
"deviation": "Rule 8.7",
"reason": "API functions are not used by the library outside of the files they are defined; however, they must be externally visible in order to be used by an application."
},
{
deviation: "Rule 8.9",
reason: "Allow to object to be defined in wider scope for debug purpose."
"deviation": "Rule 8.9",
"reason": "Allow to object to be defined in wider scope for debug purpose."
},
{
deviation: "Rule 8.13",
reason: "Allow to not to use const-qualified type for callback function."
"deviation": "Rule 8.13",
"reason": "Allow to not to use const-qualified type for callback function."
},
{
deviation: "Rule 11.4",
reason: "Allow to convert between a pointer to object and an interger type for stack alignment."
"deviation": "Rule 11.4",
"reason": "Allow to convert between a pointer to object and an interger type for stack alignment."
},
{
deviation: "Rule 15.4",
reason: "Allow to use multiple break statements in a loop."
"deviation": "Rule 15.4",
"reason": "Allow to use multiple break statements in a loop."
},
{
deviation: "Rule 15.5",
reason: "Allow to use multiple points of exit."
"deviation": "Rule 15.5",
"reason": "Allow to use multiple points of exit."
},
{
deviation: "Rule 17.8",
reason: "Allow to update the parameters of a function."
"deviation": "Rule 17.8",
"reason": "Allow to update the parameters of a function."
},
{
deviation: "Rule 18.4",
reason: "Allow to use pointer arithmetic."
"deviation": "Rule 18.4",
"reason": "Allow to use pointer arithmetic."
},
{
deviation: "Rule 19.2",
reason: "Allow to use union."
"deviation": "Rule 19.2",
"reason": "Allow to use union."
},
{
deviation: "Rule 20.5",
reason: "Allow to use #undef for MPU wrappers."
"deviation": "Rule 20.5",
"reason": "Allow to use #undef for MPU wrappers."
}
]
}

@ -96,6 +96,10 @@
#define configNUMBER_OF_CORES 1
#endif
#ifndef configUSE_MALLOC_FAILED_HOOK
#define configUSE_MALLOC_FAILED_HOOK 0
#endif
/* Basic FreeRTOS definitions. */
#include "projdefs.h"
@ -2649,10 +2653,6 @@
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
#endif
#ifndef configUSE_MALLOC_FAILED_HOOK
#define configUSE_MALLOC_FAILED_HOOK 0
#endif
#ifndef portPRIVILEGE_BIT
#define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 )
#endif

@ -178,7 +178,7 @@ void vPortGetHeapStats( HeapStats_t * pxHeapStats );
/*
* Map to the memory management routines required for the port.
*/
void * pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION;
void * pvPortMalloc( size_t xWantedSize ) PRIVILEGED_FUNCTION;
void * pvPortCalloc( size_t xNum,
size_t xSize ) PRIVILEGED_FUNCTION;
void vPortFree( void * pv ) PRIVILEGED_FUNCTION;

@ -64,7 +64,7 @@ typedef long BaseType_t;
typedef unsigned long UBaseType_t;
typedef unsigned long TickType_t;
#define portMAX_DELAY ( TickType_t ) ULONG_MAX
#define portMAX_DELAY ( ( TickType_t ) ULONG_MAX )
#define portTICK_TYPE_IS_ATOMIC 1

@ -19,6 +19,10 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
TaskFunction_t pxCode,
void * pvParameters )
{
( void ) pxTopOfStack;
( void ) pvParameters;
( void ) * pxCode;
return NULL;
}

Loading…
Cancel
Save