Skip to content

Commit cb4f5ac

Browse files
authored
Add memory-safety guideline (#4654)
* add memory-safety guideline * add some Clang warnings, revert severity changes, add stats
1 parent 834807d commit cb4f5ac

7 files changed

Lines changed: 140 additions & 2 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
guideline: memory-safety
2+
guideline_title: Memory-safety related CWEs
3+
rules:
4+
- rule_id: cwe-121
5+
title: Stack-Based Buffer Overflow
6+
rule_url: https://cwe.mitre.org/data/definitions/121.html
7+
- rule_id: cwe-122
8+
title: Heap-based Buffer Overflow
9+
rule_url: https://cwe.mitre.org/data/definitions/122.html
10+
- rule_id: cwe-123
11+
title: Write-what-where Condition
12+
rule_url: https://cwe.mitre.org/data/definitions/123.html
13+
- rule_id: cwe-124
14+
title: Buffer Underwrite ('Buffer Underflow')
15+
rule_url: https://cwe.mitre.org/data/definitions/124.html
16+
- rule_id: cwe-126
17+
title: Buffer Over-read
18+
rule_url: https://cwe.mitre.org/data/definitions/126.html
19+
- rule_id: cwe-127
20+
title: Buffer Under-read
21+
rule_url: https://cwe.mitre.org/data/definitions/127.html
22+
- rule_id: cwe-244
23+
title: Improper Clearing of Heap Memory Before Release ('Heap Inspection')
24+
rule_url: https://cwe.mitre.org/data/definitions/244.html
25+
- rule_id: cwe-401
26+
title: Missing Release of Memory after Effective Lifetime ('Memory Leak')
27+
rule_url: https://cwe.mitre.org/data/definitions/401.html
28+
- rule_id: cwe-415
29+
title: Double Free
30+
rule_url: https://cwe.mitre.org/data/definitions/415.html
31+
- rule_id: cwe-416
32+
title: Use After Free
33+
rule_url: https://cwe.mitre.org/data/definitions/416.html
34+
- rule_id: cwe-457
35+
title: Use of Uninitialized Variable
36+
rule_url: https://cwe.mitre.org/data/definitions/457.html
37+
- rule_id: cwe-476
38+
title: Nullptr Dereference
39+
rule_url: https://cwe.mitre.org/data/definitions/476.html
40+
- rule_id: cwe-562
41+
title: Return of Stack Variable Address
42+
rule_url: https://cwe.mitre.org/data/definitions/562.html
43+
- rule_id: cwe-590
44+
title: Free of Memory not on the Heap
45+
rule_url: https://cwe.mitre.org/data/definitions/590.html
46+
- rule_id: cwe-761
47+
title: Free of Pointer not at Start of Buffer
48+
rule_url: https://cwe.mitre.org/data/definitions/761.html
49+
- rule_id: cwe-762
50+
title: Mismatched Memory Management Routines
51+
rule_url: https://cwe.mitre.org/data/definitions/762.html
52+
- rule_id: cwe-785
53+
title: Use of Path Manipulation Function without Maximum Sized Buffer
54+
rule_url: https://cwe.mitre.org/data/definitions/785.html
55+
- rule_id: cwe-789
56+
title: Uncontrolled Memory Allocation
57+
rule_url: https://cwe.mitre.org/data/definitions/789.html
58+
- rule_id: cwe-843
59+
title: Access of Resource Using Incompatible Type ('Type Confusion')
60+
rule_url: https://cwe.mitre.org/data/definitions/843.html

config/labels/analyzers/clang-tidy.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4943,13 +4943,15 @@
49434943
"doc_url:https://clang.llvm.org/docs/DiagnosticsReference.html#wreturn-stack-address",
49444944
"guideline:sei-cert-c",
49454945
"guideline:sei-cert-cpp",
4946+
"guideline:memory-safety",
49464947
"profile:default",
49474948
"profile:extreme",
49484949
"profile:security",
49494950
"profile:sensitive",
49504951
"sei-cert-c:dcl30-c",
49514952
"sei-cert-cpp:exp54-cpp",
49524953
"sei-cert-cpp:exp61-cpp",
4954+
"memory-safety:cwe-562",
49534955
"severity:MEDIUM"
49544956
],
49554957
"clang-diagnostic-return-std-move": [
@@ -5727,12 +5729,14 @@
57275729
"clang-diagnostic-uninitialized": [
57285730
"doc_url:https://clang.llvm.org/docs/DiagnosticsReference.html#wuninitialized",
57295731
"guideline:sei-cert-c",
5732+
"guideline:memory-safety",
57305733
"label-tool-skip:severity",
57315734
"profile:default",
57325735
"profile:extreme",
57335736
"profile:security",
57345737
"profile:sensitive",
57355738
"sei-cert-c:exp33-c",
5739+
"memory-safety:cwe-457",
57365740
"severity:HIGH"
57375741
],
57385742
"clang-diagnostic-uninitialized-const-reference": [

config/labels/analyzers/clangsa.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,12 +334,14 @@
334334
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#core-nulldereference-c-c-objc",
335335
"guideline:cwe-top-25-2024",
336336
"guideline:sei-cert-c",
337+
"guideline:memory-safety",
337338
"profile:default",
338339
"profile:extreme",
339340
"profile:security",
340341
"profile:sensitive",
341342
"cwe-top-25-2024:cwe-476",
342343
"sei-cert-c:exp34-c",
344+
"memory-safety:cwe-476",
343345
"severity:HIGH"
344346
],
345347
"core.StackAddrEscapeBase": [
@@ -357,13 +359,16 @@
357359
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#core-stackaddressescape-c",
358360
"guideline:sei-cert-c",
359361
"guideline:sei-cert-cpp",
362+
"guideline:memory-safety",
360363
"profile:default",
361364
"profile:extreme",
362365
"profile:security",
363366
"profile:sensitive",
364367
"sei-cert-c:dcl30-c",
365368
"sei-cert-cpp:exp54-cpp",
366369
"sei-cert-cpp:exp61-cpp",
370+
"memory-safety:cwe-123",
371+
"memory-safety:cwe-562",
367372
"severity:HIGH"
368373
],
369374
"core.UndefinedBinaryOperatorResult": [
@@ -504,6 +509,7 @@
504509
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#cplusplus-newdelete-c",
505510
"guideline:cwe-top-25-2024",
506511
"guideline:sei-cert-cpp",
512+
"guideline:memory-safety",
507513
"profile:default",
508514
"profile:extreme",
509515
"profile:security",
@@ -513,16 +519,21 @@
513519
"sei-cert-cpp:mem50-cpp",
514520
"sei-cert-cpp:mem51-cpp",
515521
"sei-cert-cpp:oop54-cpp",
522+
"memory-safety:cwe-415",
523+
"memory-safety:cwe-416",
524+
"memory-safety:cwe-590",
516525
"severity:HIGH"
517526
],
518527
"cplusplus.NewDeleteLeaks": [
519528
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#cplusplus-newdeleteleaks-c",
520529
"guideline:sei-cert-cpp",
530+
"guideline:memory-safety",
521531
"profile:default",
522532
"profile:extreme",
523533
"profile:security",
524534
"profile:sensitive",
525535
"sei-cert-cpp:mem51-cpp",
536+
"memory-safety:cwe-401",
526537
"severity:HIGH"
527538
],
528539
"cplusplus.PlacementNew": [
@@ -767,9 +778,11 @@
767778
"optin.taint.TaintedAlloc": [
768779
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#optin-taint-taintedalloc-c-c",
769780
"guideline:owasp-top-10-2021",
781+
"guideline:memory-safety",
770782
"profile:extreme",
771783
"profile:sensitive",
772784
"owasp-top-10-2021:owasp-A03-2021",
785+
"memory-safety:cwe-789",
773786
"severity:HIGH"
774787
],
775788
"optin.taint.TaintedDiv": [
@@ -868,12 +881,18 @@
868881
"security.ArrayBound": [
869882
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#security-arraybound-c-c",
870883
"guideline:cwe-top-25-2024",
884+
"guideline:memory-safety",
871885
"profile:default",
872886
"profile:security",
873887
"profile:sensitive",
874888
"cwe-top-25-2024:cwe-119",
875889
"cwe-top-25-2024:cwe-125",
876890
"cwe-top-25-2024:cwe-787",
891+
"memory-safety:cwe-121",
892+
"memory-safety:cwe-122",
893+
"memory-safety:cwe-124",
894+
"memory-safety:cwe-126",
895+
"memory-safety:cwe-127",
877896
"severity:HIGH"
878897
],
879898
"security.FloatLoopCounter": [
@@ -1082,6 +1101,7 @@
10821101
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#unix-malloc-c",
10831102
"guideline:cwe-top-25-2024",
10841103
"guideline:sei-cert-c",
1104+
"guideline:memory-safety",
10851105
"profile:default",
10861106
"profile:extreme",
10871107
"profile:security",
@@ -1094,6 +1114,10 @@
10941114
"sei-cert-c:mem34-c",
10951115
"sei-cert-c:mem35-c",
10961116
"sei-cert-c:mem36-c",
1117+
"memory-safety:cwe-401",
1118+
"memory-safety:cwe-415",
1119+
"memory-safety:cwe-416",
1120+
"memory-safety:cwe-590",
10971121
"severity:MEDIUM"
10981122
],
10991123
"unix.MallocSizeof": [
@@ -1111,11 +1135,13 @@
11111135
"unix.MismatchedDeallocator": [
11121136
"doc_url:https://clang.llvm.org/docs/analyzer/checkers.html#unix-mismatcheddeallocator-c-c",
11131137
"guideline:sei-cert-cpp",
1138+
"guideline:memory-safety",
11141139
"profile:default",
11151140
"profile:extreme",
11161141
"profile:security",
11171142
"profile:sensitive",
11181143
"sei-cert-cpp:mem51-cpp",
1144+
"memory-safety:cwe-762",
11191145
"severity:MEDIUM"
11201146
],
11211147
"unix.StdCLibraryFunctions": [

config/labels/analyzers/cppcheck.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,13 @@
5151
"severity:LOW"
5252
],
5353
"cppcheck-arrayIndexOutOfBounds": [
54+
"guideline:memory-safety",
5455
"profile:default",
5556
"profile:extreme",
5657
"profile:sensitive",
58+
"memory-safety:cwe-121",
59+
"memory-safety:cwe-122",
60+
"memory-safety:cwe-126",
5761
"severity:HIGH"
5862
],
5963
"cppcheck-arrayIndexOutOfBoundsCond": [
@@ -99,9 +103,11 @@
99103
"severity:HIGH"
100104
],
101105
"cppcheck-autovarInvalidDeallocation": [
106+
"guideline:memory-safety",
102107
"profile:default",
103108
"profile:extreme",
104109
"profile:sensitive",
110+
"memory-safety:cwe-590",
105111
"severity:HIGH"
106112
],
107113
"cppcheck-badBitmaskCheck": [
@@ -120,9 +126,12 @@
120126
"severity:HIGH"
121127
],
122128
"cppcheck-bufferAccessOutOfBounds": [
129+
"guideline:memory-safety",
123130
"profile:default",
124131
"profile:extreme",
125132
"profile:sensitive",
133+
"memory-safety:cwe-121",
134+
"memory-safety:cwe-122",
126135
"severity:HIGH"
127136
],
128137
"cppcheck-catchExceptionByValue": [
@@ -305,9 +314,11 @@
305314
"severity:HIGH"
306315
],
307316
"cppcheck-deallocuse": [
317+
"guideline:memory-safety",
308318
"profile:default",
309319
"profile:extreme",
310320
"profile:sensitive",
321+
"memory-safety:cwe-416",
311322
"severity:HIGH"
312323
],
313324
"cppcheck-derefInvalidIterator": [
@@ -323,9 +334,11 @@
323334
"severity:MEDIUM"
324335
],
325336
"cppcheck-doubleFree": [
337+
"guideline:memory-safety",
326338
"profile:default",
327339
"profile:extreme",
328340
"profile:sensitive",
341+
"memory-safety:cwe-415",
329342
"severity:HIGH"
330343
],
331344
"cppcheck-duplInheritedMember": [
@@ -758,9 +771,11 @@
758771
"severity:MEDIUM"
759772
],
760773
"cppcheck-mismatchAllocDealloc": [
774+
"guideline:memory-safety",
761775
"profile:default",
762776
"profile:extreme",
763777
"profile:sensitive",
778+
"memory-safety:cwe-762",
764779
"severity:HIGH"
765780
],
766781
"cppcheck-mismatchSize": [
@@ -842,9 +857,12 @@
842857
"severity:MEDIUM"
843858
],
844859
"cppcheck-negativeIndex": [
860+
"guideline:memory-safety",
845861
"profile:default",
846862
"profile:extreme",
847863
"profile:sensitive",
864+
"memory-safety:cwe-124",
865+
"memory-safety:cwe-127",
848866
"severity:HIGH"
849867
],
850868
"cppcheck-negativeMemoryAllocationSize": [
@@ -1117,9 +1135,11 @@
11171135
"severity:LOW"
11181136
],
11191137
"cppcheck-returnDanglingLifetime": [
1138+
"guideline:memory-safety",
11201139
"profile:default",
11211140
"profile:extreme",
11221141
"profile:sensitive",
1142+
"memory-safety:cwe-562",
11231143
"severity:HIGH"
11241144
],
11251145
"cppcheck-returnLocalVariable": [
@@ -1417,9 +1437,11 @@
14171437
"severity:HIGH"
14181438
],
14191439
"cppcheck-uninitvar": [
1440+
"guideline:memory-safety",
14201441
"profile:default",
14211442
"profile:extreme",
14221443
"profile:sensitive",
1444+
"memory-safety:cwe-457",
14231445
"severity:HIGH"
14241446
],
14251447
"cppcheck-unknownEvaluationOrder": [

0 commit comments

Comments
 (0)