History

coccinelle: Check for missing NULL terminators in of_device_id tables

Failure to terminate an of_device_id table can lead to confusing failures depending on where the compiler places the array. Add a check to make sure these tables are terminated. Thanks to Mitchel Humpherys for coming up with the pattern initially.

Stephen Boyd committed 12 years ago

Commit 2d5c5db1 parent 9b24a151 file · +62 −0Browse files

Showing the changes to scripts (1 of 1 file). Show all

Unified · Split

scripts/coccinelle/misc/of_table.cocci+62−0
@@ -0,0 +1,62 @@
1+/// Make sure of_device_id tables are NULL terminated
2+//
3+// Keywords: of_table
4+// Confidence: Medium
5+// Options: --include-headers
6+
7+virtual patch
8+virtual context
9+virtual org
10+virtual report
11+
12+@depends on context@
13+identifier var, arr;
14+expression E;
15+@@
16+struct of_device_id arr[] = {
17+ ...,
18+ {
19+ .var = E,
20+* }
21+};
22+
23+@depends on patch@
24+identifier var, arr;
25+expression E;
26+@@
27+struct of_device_id arr[] = {
28+ ...,
29+ {
30+ .var = E,
31+- }
32++ },
33++ { }
34+};
35+
36+@r depends on org || report@
37+position p1;
38+identifier var, arr;
39+expression E;
40+@@
41+struct of_device_id arr[] = {
42+ ...,
43+ {
44+ .var = E,
45+ }
46+ @p1
47+};
48+
49+@script:python depends on org@
50+p1 << r.p1;
51+arr << r.arr;
52+@@
53+
54+cocci.print_main(arr,p1)
55+
56+@script:python depends on report@
57+p1 << r.p1;
58+arr << r.arr;
59+@@
60+
61+msg = "%s is not NULL terminated at line %s" % (arr, p1[0].line)
62+coccilib.report.print_report(p1[0],msg)