// SPDX-License-Identifier: GPL-2.0-only /// /// Check for code that could use struct_size(). /// // Confidence: Medium // Author: Jacob Keller // 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)