Secure Coding Standard » History » Version 11
Andreas Steffen, 28.05.2013 05:59
1 | 1 | Andreas Steffen | h1. Secure Coding Standard |
---|---|---|---|
2 | 1 | Andreas Steffen | |
3 | 7 | Andreas Steffen | The strongSwan project adheres to the following recommendations and rules proposed by the "CERT C Secure Coding Standard":https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard: |
4 | 1 | Andreas Steffen | |
5 | 10 | Andreas Steffen | {{>toc}} |
6 | 10 | Andreas Steffen | |
7 | 1 | Andreas Steffen | h2. Preprocessor (PRE) |
8 | 1 | Andreas Steffen | |
9 | 2 | Andreas Steffen | h3. Full Adherence |
10 | 2 | Andreas Steffen | |
11 | 2 | Andreas Steffen | * "PRE03-C. Prefer typedefs to defines for encoding types":https://www.securecoding.cert.org/confluence/display/seccode/PRE03-C.+Prefer+typedefs+to+defines+for+encoding+types |
12 | 2 | Andreas Steffen | |
13 | 2 | Andreas Steffen | * "PRE04-C. Do not reuse a standard header file name":https://www.securecoding.cert.org/confluence/display/seccode/PRE04-C.+Do+not+reuse+a+standard+header+file+name |
14 | 2 | Andreas Steffen | |
15 | 3 | Andreas Steffen | * "PRE06-C. Enclose header files in an inclusion guard":https://www.securecoding.cert.org/confluence/display/seccode/PRE06-C.+Enclose+header+files+in+an+inclusion+guard |
16 | 3 | Andreas Steffen | |
17 | 4 | Andreas Steffen | * "PRE09-C. Do not replace secure functions with deprecated or obsolescent functions":https://www.securecoding.cert.org/confluence/display/seccode/PRE09-C.+Do+not+replace+secure+functions+with+deprecated+or+obsolescent+functions |
18 | 4 | Andreas Steffen | |
19 | 2 | Andreas Steffen | h3. Partial Adherence |
20 | 2 | Andreas Steffen | |
21 | 2 | Andreas Steffen | * "PRE00-C. Prefer inline or static functions to function-like macros ":https://www.securecoding.cert.org/confluence/display/seccode/PRE00-C.+Prefer+inline+or+static+functions+to+function-like+macros |
22 | 2 | Andreas Steffen | |
23 | 2 | Andreas Steffen | * "PRE01-C. Use parentheses within macros around parameter names":https://www.securecoding.cert.org/confluence/display/seccode/PRE01-C.+Use+parentheses+within+macros+around+parameter+names |
24 | 2 | Andreas Steffen | |
25 | 2 | Andreas Steffen | * "PRE02-C. Macro replacement lists should be parenthesized":https://www.securecoding.cert.org/confluence/display/seccode/PRE02-C.+Macro+replacement+lists+should+be+parenthesized |
26 | 3 | Andreas Steffen | |
27 | 3 | Andreas Steffen | h3. Check Adherence |
28 | 3 | Andreas Steffen | |
29 | 3 | Andreas Steffen | * "PRE05-C. Understand macro replacement when concatenating tokens or performing stringification":https://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification |
30 | 3 | Andreas Steffen | |
31 | 1 | Andreas Steffen | * "PRE07-C. Avoid using repeated question marks":https://www.securecoding.cert.org/confluence/display/seccode/PRE07-C.+Avoid+using+repeated+question+marks |
32 | 4 | Andreas Steffen | |
33 | 4 | Andreas Steffen | * "PRE10-C. Wrap multistatement macros in a do-while loop":https://www.securecoding.cert.org/confluence/display/seccode/PRE10-C.+Wrap+multistatement+macros+in+a+do-while+loop |
34 | 4 | Andreas Steffen | |
35 | 4 | Andreas Steffen | * "PRE11-C. Do not conclude macro definitions with a semicolon ":https://www.securecoding.cert.org/confluence/display/seccode/PRE11-C.+Do+not+conclude+macro+definitions+with+a+semicolon |
36 | 4 | Andreas Steffen | |
37 | 4 | Andreas Steffen | * "PRE12-C. Do not define unsafe macros":https://www.securecoding.cert.org/confluence/display/seccode/PRE12-C.+Do+not+define+unsafe+macros |
38 | 4 | Andreas Steffen | |
39 | 4 | Andreas Steffen | * "PRE30-C. Do not create a universal character name through concatenation":https://www.securecoding.cert.org/confluence/display/seccode/PRE30-C.+Do+not+create+a+universal+character+name+through+concatenation |
40 | 4 | Andreas Steffen | |
41 | 4 | Andreas Steffen | * "PRE31-C. Avoid side-effects in arguments to unsafe macros":https://www.securecoding.cert.org/confluence/display/seccode/PRE31-C.+Avoid+side-effects+in+arguments+to+unsafe+macros |
42 | 4 | Andreas Steffen | |
43 | 4 | Andreas Steffen | * "PRE32-C. Do not use preprocessor directives inside macro arguments":https://www.securecoding.cert.org/confluence/display/seccode/PRE32-C.+Do+not+use+preprocessor+directives+inside+macro+arguments |
44 | 3 | Andreas Steffen | |
45 | 3 | Andreas Steffen | h3. No Adherence |
46 | 3 | Andreas Steffen | |
47 | 3 | Andreas Steffen | * "PRE08-C. Guarantee that header file names are unique":https://www.securecoding.cert.org/confluence/display/seccode/PRE08-C.+Guarantee+that+header+file+names+are+unique |
48 | 2 | Andreas Steffen | |
49 | 1 | Andreas Steffen | h2. Declarations and Initialization (DCL) |
50 | 1 | Andreas Steffen | |
51 | 6 | Andreas Steffen | h3. Full Adherence |
52 | 6 | Andreas Steffen | |
53 | 6 | Andreas Steffen | * "DCL01-C. Do not reuse variable names in subscopes":https://www.securecoding.cert.org/confluence/display/seccode/DCL01-C.+Do+not+reuse+variable+names+in+subscopes |
54 | 6 | Andreas Steffen | |
55 | 6 | Andreas Steffen | * "DCL02-C. Use visually distinct identifiers":https://www.securecoding.cert.org/confluence/display/seccode/DCL02-C.+Use+visually+distinct+identifiers |
56 | 6 | Andreas Steffen | |
57 | 8 | Andreas Steffen | * "DCL05-C. Use typedefs to improve code readability":https://www.securecoding.cert.org/confluence/display/seccode/DCL05-C.+Use+typedefs+to+improve+code+readability |
58 | 8 | Andreas Steffen | |
59 | 8 | Andreas Steffen | * "DCL07-C. Include the appropriate type information in function declarators":https://www.securecoding.cert.org/confluence/display/seccode/DCL07-C.+Include+the+appropriate+type+information+in+function+declarators |
60 | 8 | Andreas Steffen | |
61 | 8 | Andreas Steffen | * "DCL12-C. Implement abstract data types using opaque types":https://www.securecoding.cert.org/confluence/display/seccode/DCL12-C.+Implement+abstract+data+types+using+opaque+types |
62 | 8 | Andreas Steffen | |
63 | 8 | Andreas Steffen | * "DCL15-C. Declare file-scope objects or functions that do not need external linkage as static":https://www.securecoding.cert.org/confluence/display/seccode/DCL15-C.+Declare+file-scope+objects+or+functions+that+do+not+need+external+linkage+as+static |
64 | 8 | Andreas Steffen | |
65 | 8 | Andreas Steffen | * "DCL18-C. Do not begin integer constants with 0 when specifying a decimal value":https://www.securecoding.cert.org/confluence/display/seccode/DCL18-C.+Do+not+begin+integer+constants+with+0+when+specifying+a+decimal+value |
66 | 8 | Andreas Steffen | |
67 | 8 | Andreas Steffen | * "DCL31-C. Declare identifiers before using them":https://www.securecoding.cert.org/confluence/display/seccode/DCL31-C.+Declare+identifiers+before+using+them |
68 | 8 | Andreas Steffen | |
69 | 11 | Andreas Steffen | * "DCL35-C. Call functions with the correct number and type of arguments":https://www.securecoding.cert.org/confluence/display/seccode/DCL35-C.+Call+functions+with+the+correct+number+and+type+of+arguments |
70 | 11 | Andreas Steffen | |
71 | 11 | Andreas Steffen | * "DCL36-C. Do not declare an identifier with conflicting linkage classifications":https://www.securecoding.cert.org/confluence/display/seccode/DCL36-C.+Do+not+declare+an+identifier+with+conflicting+linkage+classifications |
72 | 11 | Andreas Steffen | |
73 | 8 | Andreas Steffen | h3. Partial Adherence |
74 | 8 | Andreas Steffen | |
75 | 8 | Andreas Steffen | * "DCL06-C. Use meaningful symbolic constants to represent literal values":https://www.securecoding.cert.org/confluence/display/seccode/DCL06-C.+Use+meaningful+symbolic+constants+to+represent+literal+values |
76 | 8 | Andreas Steffen | |
77 | 8 | Andreas Steffen | * "DCL19-C. Minimize the scope of variables and functions":https://www.securecoding.cert.org/confluence/display/seccode/DCL19-C.+Minimize+the+scope+of+variables+and+functions |
78 | 8 | Andreas Steffen | |
79 | 8 | Andreas Steffen | * "DCL20-C. Always specify void even if a function accepts no arguments":https://www.securecoding.cert.org/confluence/display/seccode/DCL20-C.+Always+specify+void+even+if+a+function+accepts+no+arguments |
80 | 8 | Andreas Steffen | |
81 | 8 | Andreas Steffen | h3. Check Adherence |
82 | 8 | Andreas Steffen | |
83 | 8 | Andreas Steffen | * "DCL08-C. Properly encode relationships in constant definitions":https://www.securecoding.cert.org/confluence/display/seccode/DCL08-C.+Properly+encode+relationships+in+constant+definitions |
84 | 8 | Andreas Steffen | |
85 | 8 | Andreas Steffen | * "DCL09-C. Declare functions that return errno with a return type of errno_t":https://www.securecoding.cert.org/confluence/display/seccode/DCL09-C.+Declare+functions+that+return+errno+with+a+return+type+of+errno_t |
86 | 8 | Andreas Steffen | |
87 | 8 | Andreas Steffen | * "DCL10-C. Maintain the contract between the writer and caller of variadic functions":https://www.securecoding.cert.org/confluence/display/seccode/DCL10-C.+Maintain+the+contract+between+the+writer+and+caller+of+variadic+functions |
88 | 8 | Andreas Steffen | |
89 | 8 | Andreas Steffen | * "DCL11-C. Understand the type issues associated with variadic functions":https://www.securecoding.cert.org/confluence/display/seccode/DCL11-C.+Understand+the+type+issues+associated+with+variadic+functions |
90 | 8 | Andreas Steffen | |
91 | 9 | Andreas Steffen | * "DCL16-C. Use 'L,' not 'l,' to indicate a long value":https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=19759250 |
92 | 8 | Andreas Steffen | |
93 | 8 | Andreas Steffen | * "DCL17-C. Beware of miscompiled volatile-qualified variables":https://www.securecoding.cert.org/confluence/display/seccode/DCL17-C.+Beware+of+miscompiled+volatile-qualified+variables |
94 | 8 | Andreas Steffen | |
95 | 8 | Andreas Steffen | * "DCL21-C. Understand the storage of compound literals":https://www.securecoding.cert.org/confluence/display/seccode/DCL21-C.+Understand+the+storage+of+compound+literals |
96 | 8 | Andreas Steffen | |
97 | 8 | Andreas Steffen | * "DCL30-C. Declare objects with appropriate storage durations":https://www.securecoding.cert.org/confluence/display/seccode/DCL30-C.+Declare+objects+with+appropriate+storage+durations |
98 | 8 | Andreas Steffen | |
99 | 8 | Andreas Steffen | * "DCL34-C. Use volatile for data that cannot be cached":https://www.securecoding.cert.org/confluence/display/seccode/DCL34-C.+Use+volatile+for+data+that+cannot+be+cached |
100 | 11 | Andreas Steffen | |
101 | 11 | Andreas Steffen | * "DCL37-C. Do not declare or define a reserved identifier":https://www.securecoding.cert.org/confluence/display/seccode/DCL37-C.+Do+not+declare+or+define+a+reserved+identifier |
102 | 8 | Andreas Steffen | |
103 | 6 | Andreas Steffen | h3. No Adherence |
104 | 6 | Andreas Steffen | |
105 | 6 | Andreas Steffen | * "DCL00-C. Const-qualify immutable objects":https://www.securecoding.cert.org/confluence/display/seccode/DCL00-C.+Const-qualify+immutable+objects |
106 | 6 | Andreas Steffen | |
107 | 6 | Andreas Steffen | * "DCL03-C. Use a static assertion to test the value of a constant expression":https://www.securecoding.cert.org/confluence/display/seccode/DCL03-C.+Use+a+static+assertion+to+test+the+value+of+a+constant+expression |
108 | 8 | Andreas Steffen | |
109 | 8 | Andreas Steffen | * "DCL04-C. Do not declare more than one variable per declaration":https://www.securecoding.cert.org/confluence/display/seccode/DCL04-C.+Do+not+declare+more+than+one+variable+per+declaration |
110 | 8 | Andreas Steffen | |
111 | 8 | Andreas Steffen | * "DCL13-C. Declare function parameters that are pointers to values not changed by the function as const ":https://www.securecoding.cert.org/confluence/display/seccode/DCL13-C.+Declare+function+parameters+that+are+pointers+to+values+not+changed+by+the+function+as+const |
112 | 8 | Andreas Steffen | |
113 | 8 | Andreas Steffen | * "DCL32-C. Guarantee that mutually visible identifiers are unique":https://www.securecoding.cert.org/confluence/display/seccode/DCL32-C.+Guarantee+that+mutually+visible+identifiers+are+unique |
114 | 6 | Andreas Steffen | |
115 | 1 | Andreas Steffen | h2. Expressions (EXP) |
116 | 1 | Andreas Steffen | |
117 | 1 | Andreas Steffen | h2. Integers (INT) |
118 | 1 | Andreas Steffen | |
119 | 1 | Andreas Steffen | h2. Floating Point (FLP) |
120 | 1 | Andreas Steffen | |
121 | 1 | Andreas Steffen | h2. Arrays (ARR) |
122 | 1 | Andreas Steffen | |
123 | 1 | Andreas Steffen | h2. Characters and Strings (STR) |
124 | 1 | Andreas Steffen | |
125 | 1 | Andreas Steffen | h2. Memory Management (MEM) |
126 | 1 | Andreas Steffen | |
127 | 1 | Andreas Steffen | h2. Input Output (FIO) |
128 | 1 | Andreas Steffen | |
129 | 1 | Andreas Steffen | h2. Environment (ENV) |
130 | 1 | Andreas Steffen | |
131 | 1 | Andreas Steffen | h2. Signals (SIG) |
132 | 1 | Andreas Steffen | |
133 | 1 | Andreas Steffen | h2. Error Handling (ERR) |
134 | 1 | Andreas Steffen | |
135 | 1 | Andreas Steffen | h2. Application Programming Interfaces (API) |
136 | 1 | Andreas Steffen | |
137 | 1 | Andreas Steffen | h2. Concurrency (CON) |
138 | 1 | Andreas Steffen | |
139 | 1 | Andreas Steffen | h2. Miscellaneous (MSC) |
140 | 1 | Andreas Steffen | |
141 | 1 | Andreas Steffen | h2. POSIX (POS) |