From: Stephen Boyd Date: Tue, 3 Jun 2014 18:25:27 +0000 (+0200) Subject: coccinelle: Check for missing NULL terminators in of_device_id tables X-Git-Tag: v4.14-rc1~7374^2~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d5c5dbb48253f1729dc09f266a98bd2d7e694cb;p=platform%2Fkernel%2Flinux-rpi.git 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. Cc: Mitchel Humpherys Cc: Gilles Muller Cc: Nicolas Palix Cc: Rob Herring Cc: devicetree@vger.kernel.org Signed-off-by: Stephen Boyd Acked-by: Grant Likely Signed-off-by: Julia Lawall Signed-off-by: Michal Marek --- diff --git a/scripts/coccinelle/misc/of_table.cocci b/scripts/coccinelle/misc/of_table.cocci new file mode 100644 index 0000000..3c93404 --- /dev/null +++ b/scripts/coccinelle/misc/of_table.cocci @@ -0,0 +1,62 @@ +/// Make sure of_device_id tables are NULL terminated +// +// Keywords: of_table +// Confidence: Medium +// Options: --include-headers + +virtual patch +virtual context +virtual org +virtual report + +@depends on context@ +identifier var, arr; +expression E; +@@ +struct of_device_id arr[] = { + ..., + { + .var = E, +* } +}; + +@depends on patch@ +identifier var, arr; +expression E; +@@ +struct of_device_id arr[] = { + ..., + { + .var = E, +- } ++ }, ++ { } +}; + +@r depends on org || report@ +position p1; +identifier var, arr; +expression E; +@@ +struct of_device_id arr[] = { + ..., + { + .var = E, + } + @p1 +}; + +@script:python depends on org@ +p1 << r.p1; +arr << r.arr; +@@ + +cocci.print_main(arr,p1) + +@script:python depends on report@ +p1 << r.p1; +arr << r.arr; +@@ + +msg = "%s is not NULL terminated at line %s" % (arr, p1[0].line) +coccilib.report.print_report(p1[0],msg)