| // SPDX-License-Identifier: GPL-2.0-only |
| /// |
| /// Check for code that could use struct_size(). |
| /// |
| // Confidence: Medium |
| // Author: Jacob Keller <jacob.e.keller@intel.com> |
| // Copyright: (C) 2023 Intel Corporation |
| // Options: --no-includes --include-headers |
| |
| virtual patch |
| virtual context |
| virtual org |
| virtual report |
| |
| // the overflow Kunit tests have some code which intentionally does not use |
| // the macros, so we want to ignore this code when reporting potential |
| // issues. |
| @overflow_tests@ |
| identifier f = overflow_size_helpers_test; |
| @@ |
| |
| f |
| |
| //---------------------------------------------------------- |
| // For context mode |
| //---------------------------------------------------------- |
| |
| @depends on !overflow_tests && context@ |
| expression E1, E2; |
| identifier m; |
| @@ |
| ( |
| * (sizeof(*E1) + (E2 * sizeof(*E1->m))) |
| ) |
| |
| //---------------------------------------------------------- |
| // For patch mode |
| //---------------------------------------------------------- |
| |
| @depends on !overflow_tests && patch@ |
| expression E1, E2; |
| identifier m; |
| @@ |
| ( |
| - (sizeof(*E1) + (E2 * sizeof(*E1->m))) |
| + struct_size(E1, m, E2) |
| ) |
| |
| //---------------------------------------------------------- |
| // For org and report mode |
| //---------------------------------------------------------- |
| |
| @r depends on !overflow_tests && (org || report)@ |
| expression E1, E2; |
| identifier m; |
| position p; |
| @@ |
| ( |
| (sizeof(*E1)@p + (E2 * sizeof(*E1->m))) |
| ) |
| |
| @script:python depends on org@ |
| p << r.p; |
| @@ |
| |
| coccilib.org.print_todo(p[0], "WARNING should use struct_size") |
| |
| @script:python depends on report@ |
| p << r.p; |
| @@ |
| |
| msg="WARNING: Use struct_size" |
| coccilib.report.print_report(p[0], msg) |
| |