Hyundai-Kia Motor Corp (HKMC) Secure C++ Coding Standard for Automotive Development mapped to Klocwork and Klocwork community checkers

Rule Checker name and description
P-CON-001

CERT.CONC.MUTEX.DESTROY_WHILE_LOCKED   Do not destroy a mutex while it is locked

P-CON-004

CONC.DL   Deadlock

P-CON-005

CERT.CONC.WAKE_IN_LOOP   Wrap functions that can spuriously wake up in a loop

P-CON-006

CERT.CONC.UNSAFE_COND_VAR   Preserve thread safety and liveness when using condition variables

P-CTR-001

ABV.ANY_SIZE_ARRAY   Buffer Overflow - Array Index Out of Bounds

ABV.GENERAL   Buffer Overflow - Array Index Out of Bounds

ABV.GENERAL.MULTIDIMENSION   Buffer Overflow - Array Index Out of Bounds

ABV.STACK   Buffer Overflow - Local Array Index Out of Bounds

ABV.TAINTED   Buffer Overflow from Unvalidated Input

SV.TAINTED.ALLOC_SIZE   Use of Unvalidated Integer in Memory Allocation

SV.TAINTED.CALL.INDEX_ACCESS   Use of Unvalidated Integer as Array Index by Function Call

SV.TAINTED.CALL.LOOP_BOUND   Use of Unvalidated Integer in Loop Condition through a Function Call

SV.TAINTED.INDEX_ACCESS   Use of Unvalidated Integer as Array Index

P-CTR-002

ITER.CONTAINER.MODIFIED   Use of invalid iterator

P-CTR-004

CXX.ITER.END.BEGIN   Iterator representing end of the range precedes start of range

ITER.INAPPROPRIATE   Use of iterator with inappropriate container object

ITER.INAPPROPRIATE.MULTIPLE   Use of iterator with inappropriate container object

P-DCL-001

MISRA.FUNC.VARARG   Function with variable number of arguments

P-DCL-002

MISRA.DEFINE.WRONGNAME   Usage of a name from the standard library for naming a macro

MISRA.DEFINE.WRONGNAME.UNDERSCORE   Usage of a reserved name for naming a macro

MISRA.STDLIB.WRONGNAME   Reused name of standard library macro, object or function

MISRA.STDLIB.WRONGNAME.UNDERSCORE   Usage of a reserved name for naming a language entity

MISRA.UNDEF.WRONGNAME   Undefinition of a name from the standard library

MISRA.UNDEF.WRONGNAME.UNDERSCORE   Undefinition of a reserved name

P-DCL-003

CERT.DCL.REF_TYPE.CONST_OR_VOLATILE   Never qualify a reference type with const or volatile

P-DCL-004

CERT.DCL.AMBIGUOUS_DECL   Do not write syntactically ambiguous declarations

P-DCL-005

CERT.DCL.SAME_SCOPE_ALLOC_DEALLOC   Overload allocation and deallocation functions as a pair in the same scope

P-DCL-006

PORTING.STORAGE.STRUCT   Byte position of elements in a structure could depend on alignment and packing attributes.

P-DCL-007

CXX.STATIC.OBJ.RECURSION   Do not reenter function during initialization of static objects

P-DCL-008

MISRA.DTOR.THROW   Throw in destructor

P-DCL-009

CERT.DCL.STD_NS_MODIFIED   Do not modify the standard namespaces

P-DCL-010

MISRA.NAMESPACE.UNMD   Unnamed namespace in header file

P-DCL-011

AUTOSAR.ADD.ONEDEFRULE.FUNC   Function is violating one definition rule

AUTOSAR.ADD.ONEDEFRULE.VAR   Variable is violating one definition rule

MISRA.CT.UNIQUE.ID   Identifier clashes with tag name

MISRA.TYPE.NAMECLASH.CPP.2008   Identifier in one name space has same spelling as identifier in other name space

MISRA.TYPEDEF.NOT_UNIQUE   Typedef name is used for another entity

P-ERR-001

CERT.ERR.ABRUPT_TERM   Do not abruptly terminate the program

P-ERR-003

MISRA.STDLIB.LONGJMP   Use of setjmp macro or longjmp function

P-ERR-004

MISRA.CTOR.TRY.NON_STATIC   Function try/catch block of constructor or destructor references non-static members

P-ERR-005

MISRA.CATCH.NOALL   Ellipsis exception handler is not the last one in a try-catch block

MISRA.CATCH.WRONGORD   Handler for a base exception class precedes to a handler for a derived exception class in a try-catch block

P-ERR-008

CL.MLK   Memory Leak - in destructor

MLK.MIGHT   Memory Leak - possible

MLK.MUST   Memory Leak

MLK.RET.MIGHT   Memory Leak - possible

MLK.RET.MUST   Memory Leak

RH.LEAK   Resource leak

P-ERR-010

MISRA.CATCH.BY_VALUE   Exception object of class type is caught by value

P-ERR-011

CERT.ERR.CONV.STR_TO_NUM   Detect errors when converting a string to a number

P-EXP-001

CERT.EXPR.PARENS   The precedence of operators within expressions should be made explicit.

MISRA.EXPR.PARENS.INSUFFICIENT   Limited dependence required for operator precedence rules in expressions

MISRA.INCR_DECR.OTHER   Increment or decrement operator is mixed with other operators in expression

MISRA.INCR_DECR.SIDEEFF.2012   A full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator

PORTING.VAR.EFFECTS   Variable used twice in one expression where one usage is subject to side-effects

P-EXP-002

CERT.EXPR.DELETE_ARR.BASE_PTR   Do not delete an array through a pointer of the incorrect type

P-EXP-003

MISRA.SIZEOF.SIDE_EFFECT   Operand of sizeof has side effects

P-EXP-004

UNINIT.CTOR.MIGHT   Uninitialized Variable in Constructor - possible

UNINIT.CTOR.MUST   Uninitialized Variable in Constructor

UNINIT.HEAP.MIGHT   Uninitialized Heap Use - possible

UNINIT.HEAP.MUST   Uninitialized Heap Use

UNINIT.STACK.ARRAY.MIGHT   Uninitialized Array - possible

UNINIT.STACK.ARRAY.MUST   Uninitialized Array

UNINIT.STACK.ARRAY.PARTIAL.MUST   Partially Uninitialized Array

UNINIT.STACK.MIGHT   Uninitialized Variable - possible

UNINIT.STACK.MUST   Uninitialized Variable

P-EXP-005

CL.FFM.ASSIGN   Use of free memory (double free) - no operator=

CL.FFM.COPY   Use of free memory (double free) - no copy constructor

LOCRET.ARG   Function returns address of local variable

LOCRET.GLOB   Function returns address of local variable

LOCRET.RET   Function returns address of local variable

UFM.DEREF.MIGHT   Use of free memory (access) - possible

UFM.DEREF.MUST   Use of Freed Memory by Pointer

UFM.FFM.MIGHT   Use of free memory (double free) - possible

UFM.FFM.MUST   Freeing Freed Memory

UFM.RETURN.MIGHT   Use of freed memory (return) - possible

UFM.RETURN.MUST   Use of Freed Memory on Return

UFM.USE.MIGHT   Use of free memory - possible

UFM.USE.MUST   Use of Freed Memory

UNINIT.HEAP.MIGHT   Uninitialized Heap Use - possible

UNINIT.HEAP.MUST   Uninitialized Heap Use

UNINIT.STACK.ARRAY.MIGHT   Uninitialized Array - possible

UNINIT.STACK.ARRAY.MUST   Uninitialized Array

UNINIT.STACK.ARRAY.PARTIAL.MUST   Partially Uninitialized Array

UNINIT.STACK.MIGHT   Uninitialized Variable - possible

UNINIT.STACK.MUST   Uninitialized Variable

P-EXP-006

MISRA.CAST.CONST   Cast operation removes const or volatile modifier from a pointer or reference

P-EXP-007

CERT.VA_START.TYPE   Pass an object of the correct type to va_start

P-EXP-010

CERT.MEMCMP.PADDED_DATA   Do not compare padding data

P-FIO-002

RH.LEAK   Resource leak

P-MEM-001

UFM.DEREF.MIGHT   Use of free memory (access) - possible

UFM.DEREF.MUST   Use of Freed Memory by Pointer

UFM.FFM.MIGHT   Use of free memory (double free) - possible

UFM.FFM.MUST   Freeing Freed Memory

UFM.RETURN.MIGHT   Use of freed memory (return) - possible

UFM.RETURN.MUST   Use of Freed Memory on Return

UFM.USE.MIGHT   Use of free memory - possible

UFM.USE.MUST   Use of Freed Memory

P-MEM-002

CL.FMM   Freeing Mismatched Memory - in destructor

FMM.MIGHT   Freeing Mismatched Memory - possible

FMM.MUST   Freeing Mismatched Memory

P-MEM-007

MLK.MIGHT   Memory Leak - possible

MLK.MUST   Memory Leak

MLK.RET.MIGHT   Memory Leak - possible

MLK.RET.MUST   Memory Leak

P-MSC-001

CERT.MSC.STD_RAND_CALL   Do not use std::rand() for generating pseudorandom numbers

P-MSC-002

AUTOSAR.STDLIB.RANDOM.NBR_GEN_DEFAULT_INIT   Random number engines shall not be default-initialized

CERT.MSC.SEED_RANDOM   Properly seed pseudorandom number generators

P-MSC-003

FUNCRET.GEN   Non-void function does not return value

P-MSC-004

CERT.MSC.NORETURN_FUNC_RETURNS   Do not return from a function declared [[noreturn]]

P-MSC-005

LOCRET.ARG   Function returns address of local variable

LOCRET.GLOB   Function returns address of local variable

LOCRET.RET   Function returns address of local variable

P-OOP-001

CERT.OOP.CTOR.VIRTUAL_FUNC   Do not invoke virtual functions from constructors or destructors

P-OOP-003

CL.MLK.VIRTUAL   Memory Leak - possible in destructor

CWARN.DTOR.NONVIRT.DELETE   Delete expression for an object of a class with virtual methods and no virtual destructor

P-OOP-004

CERT.OOP.CTOR.INIT_ORDER   Write constructor member initializers in the canonical order

P-OOP-005

CL.SELF-ASSIGN   Use of free memory (double free) - in operator=

P-OOP-006

CERT.OOP.PTR_MEMBER.NO_MEMBER   Do not use pointer-to-member operators to access nonexistent members

P-OOP-007

CERT.OOP.CSTD_FUNC_USE   Prefer special member functions and overloaded operators to C Standard Library functions

P-OOP-008

CERT.OOP.COPY_MUTATES   Copy operations must not mutate the source object

P-OOP-009

CXX.STATIC.OBJ.FINAL   Initialized public static field not mark as final

P-OOP-010

CXX.MEMBER.IMPORTANT.PRIVATE   Important member data shall be private

P-OOP-011

CXX.MEMBER.CRITICAL.PUBLIC.METHOD   Critical private member data shall not be directly writable by a public method

P-STR-001

NNTS.MIGHT   Buffer Overflow - Non-null Terminated String

NNTS.MUST   Buffer Overflow - Non-null Terminated String

SV.FMT_STR.BAD_SCAN_FORMAT   Input format specifier error

SV.UNBOUND_STRING_INPUT.CIN   Usage of cin for unbounded string input

SV.UNBOUND_STRING_INPUT.FUNC   Usage of unbounded string input

P-STR-003

ITER.CONTAINER.MODIFIED   Use of invalid iterator

"MISRA", "MISRA C" and "MISRA C++" are registered trademarks of The MISRA Consortium Limited. ​