SecureCoding-5.3¶
Accessing shared objects in signal handlers
Required inputs: IR
Possible Messages
Key |
Text |
Severity |
Disabled |
|---|---|---|---|
multiple_lock_add |
Lock is acquired while it is already locked. |
None |
False |
non_recursive_lock_add |
Non-recursive lock is acquired while it is already locked. |
None |
False |
removed_nonexisting_lock |
Lock is released, although it is not currently locked. |
None |
False |
unbalanced_locks_path |
Different control flow paths have different sets of locks. |
None |
False |
unbalanced_locks_routine |
Routine may return with different lock set than it is entered with ({in_set} vs {out_set}). |
None |
False |
Options¶
This rule shares the following common options: exclude_in_macros, exclude_messages_in_system_headers, excludes, extend_exclude_to_macro_invocations, includes, justification_checker, languages, post_processing, provider, report_at, severity
The following places define options that affect this rule: Stylechecks, Analysis-GlobalOptions
access_kinds¶
access_kinds : set[bauhaus.ir.LIR_Class_Name] = {'Reading_Operand_Interface', 'Writing_Operand_Interface'}
Reading_Operand_Interface,
Writing_Operand_Interface, Address_Operand_Interface).
allow_c11_atomics¶
allow_c11_atomics : bool = True
allow_volatile_sig_atomic_t¶
allow_volatile_sig_atomic_t : bool = False
volatile sig_atomic_t.
debug_output¶
debug_output : bool = False
enter_critical_functions¶
enter_critical_functions
Set of function names to enter a critical region.Type: set[bauhaus.analysis.config.QualifiedName]
Default:
{'EnterCriticalSection', 'mtx_lock', 'pthread_mutex_lock', 'std::_Mutex_base::lock', 'std::mutex::lock'}
enter_critical_macros¶
enter_critical_macros : set[bauhaus.analysis.config.MacroName] = set()
excluded_routines¶
excluded_routines : set[bauhaus.analysis.config.QualifiedName] = set()
excluded_subgraphs¶
excluded_subgraphs : set[bauhaus.analysis.config.QualifiedName] = set()
exit_critical_functions¶
exit_critical_functions
Set of function names to exit a critical region.Type: set[bauhaus.analysis.config.QualifiedName]
Default:
{'ExitCriticalSection', 'mtx_unlock', 'pthread_mutex_unlock', 'std::_Mutex_base::unlock', 'std::mutex::unlock'}
exit_critical_macros¶
exit_critical_macros : set[bauhaus.analysis.config.MacroName] = set()
inspect_pointers¶
inspect_pointers : bool = False
nested_critical_regions¶
nested_critical_regions : bool = True
output_safe_accesses¶
output_safe_accesses : bool = False
partitions¶
partitions
Dict with partition name as key and dict as value. Partitions describe parts of the IR graph that can be run as a task or an interrupt service routine. The partition dict can contain keys as follows:Type: dict[str, dict[str, typing.Any]]
Default:
{ 'Signal Handlers': { 'functions_passed_to': ['signal', 'sigaction'] }, 'main': { 'entries': ['main'] } }
entries: list of entry functions or this task/isrfunctions_passed_to: name of thread creation function. Any function designated by a pointer passed to that function will be considered an entry function.vectors: list of global variable names with function pointers to entry functions or this task/ISRguarded: boolean property. Set toTrueif this task is nonpreemptive and cannot be interrupted by interrupt handlers. Set toFalseor omit otherwise (default).
__interrupts__ will automatically contain
all interrupt handlers recorded as Additional_Entries in IR (see
compiler toolchain's advanced.main_entries configuration) in addition
to any entries specified in its dict.
report_cfg_based_critical_region_issues¶
report_cfg_based_critical_region_issues : bool = False
show_identical_access¶
show_identical_access : bool = False
show_object_number¶
show_object_number : bool = False
strict_priorities¶
strict_priorities : bool = False
treat_types_as_atomic¶
treat_types_as_atomic : set[typing.Pattern[str] | typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[typing.Pattern[str]]]] = set()