Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / scripts / coccinelle / misc / struct_size.cocci
blob9b02c37438e4073d5f230324dcd1e56bd5f0fb88
1 // SPDX-License-Identifier: GPL-2.0-only
2 ///
3 /// Check for code that could use struct_size().
4 ///
5 // Confidence: Medium
6 // Author: Jacob Keller <jacob.e.keller@intel.com>
7 // Copyright: (C) 2023 Intel Corporation
8 // Options: --no-includes --include-headers
10 virtual patch
11 virtual context
12 virtual org
13 virtual report
15 // the overflow Kunit tests have some code which intentionally does not use
16 // the macros, so we want to ignore this code when reporting potential
17 // issues.
18 @overflow_tests@
19 identifier f = overflow_size_helpers_test;
24 //----------------------------------------------------------
25 //  For context mode
26 //----------------------------------------------------------
28 @depends on !overflow_tests && context@
29 expression E1, E2;
30 identifier m;
33 * (sizeof(*E1) + (E2 * sizeof(*E1->m)))
36 //----------------------------------------------------------
37 //  For patch mode
38 //----------------------------------------------------------
40 @depends on !overflow_tests && patch@
41 expression E1, E2;
42 identifier m;
45 - (sizeof(*E1) + (E2 * sizeof(*E1->m)))
46 + struct_size(E1, m, E2)
49 //----------------------------------------------------------
50 //  For org and report mode
51 //----------------------------------------------------------
53 @r depends on !overflow_tests && (org || report)@
54 expression E1, E2;
55 identifier m;
56 position p;
59  (sizeof(*E1)@p + (E2 * sizeof(*E1->m)))
62 @script:python depends on org@
63 p << r.p;
66 coccilib.org.print_todo(p[0], "WARNING should use struct_size")
68 @script:python depends on report@
69 p << r.p;
72 msg="WARNING: Use struct_size"
73 coccilib.report.print_report(p[0], msg)