xref: /linux/scripts/coccinelle/misc/struct_size.cocci (revision 3a2c4d55e32ad65efebdb6de44eef3bfa08bb49d)
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
9
10virtual patch
11virtual context
12virtual org
13virtual report
14
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@
19identifier f = overflow_size_helpers_test;
20@@
21
22f
23
24//----------------------------------------------------------
25//  For context mode
26//----------------------------------------------------------
27
28@depends on !overflow_tests && context@
29expression E1, E2;
30identifier m;
31@@
32* sizeof(*E1) + (E2 * sizeof(*E1->m))
33
34//----------------------------------------------------------
35//  For patch mode
36//----------------------------------------------------------
37
38@depends on !overflow_tests && patch@
39expression E1, E2;
40identifier m;
41@@
42(
43- (sizeof(*E1) + (E2 * sizeof(*E1->m)))
44+ struct_size(E1, m, E2)
45)
46
47//----------------------------------------------------------
48//  For org and report mode
49//----------------------------------------------------------
50
51@r depends on !overflow_tests && (org || report)@
52expression E1, E2;
53identifier m;
54position p;
55@@
56 sizeof(*E1)@p + (E2 * sizeof(*E1->m))
57
58@script:python depends on org@
59p << r.p;
60@@
61
62coccilib.org.print_todo(p[0], "WARNING should use struct_size")
63
64@script:python depends on report@
65p << r.p;
66@@
67
68msg="WARNING: Use struct_size"
69coccilib.report.print_report(p[0], msg)
70
71