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 10 virtual patch 11 virtual context 12 virtual org 13 virtual 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@ 19 identifier f = overflow_size_helpers_test; 20 @@ 21 22 f 23 24 //---------------------------------------------------------- 25 // For context mode 26 //---------------------------------------------------------- 27 28 @depends on !overflow_tests && context@ 29 expression E1, E2; 30 identifier m; 31 @@ 32 ( 33 * (sizeof(*E1) + (E2 * sizeof(*E1->m))) 34 ) 35 36 //---------------------------------------------------------- 37 // For patch mode 38 //---------------------------------------------------------- 39 40 @depends on !overflow_tests && patch@ 41 expression E1, E2; 42 identifier m; 43 @@ 44 ( 45 - (sizeof(*E1) + (E2 * sizeof(*E1->m))) 46 + struct_size(E1, m, E2) 47 ) 48 49 //---------------------------------------------------------- 50 // For org and report mode 51 //---------------------------------------------------------- 52 53 @r depends on !overflow_tests && (org || report)@ 54 expression E1, E2; 55 identifier m; 56 position p; 57 @@ 58 ( 59 (sizeof(*E1)@p + (E2 * sizeof(*E1->m))) 60 ) 61 62 @script:python depends on org@ 63 p << r.p; 64 @@ 65 66 coccilib.org.print_todo(p[0], "WARNING should use struct_size") 67 68 @script:python depends on report@ 69 p << r.p; 70 @@ 71 72 msg="WARNING: Use struct_size" 73 coccilib.report.print_report(p[0], msg) 74
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.