1 // SPDX-License-Identifier: GPL-2.0-only 1 // SPDX-License-Identifier: GPL-2.0-only 2 /// 2 /// 3 /// Check for code that could use struct_size( 3 /// Check for code that could use struct_size(). 4 /// 4 /// 5 // Confidence: Medium 5 // Confidence: Medium 6 // Author: Jacob Keller <jacob.e.keller@intel.c 6 // Author: Jacob Keller <jacob.e.keller@intel.com> 7 // Copyright: (C) 2023 Intel Corporation 7 // Copyright: (C) 2023 Intel Corporation 8 // Options: --no-includes --include-headers 8 // Options: --no-includes --include-headers 9 9 10 virtual patch 10 virtual patch 11 virtual context 11 virtual context 12 virtual org 12 virtual org 13 virtual report 13 virtual report 14 14 15 // the overflow Kunit tests have some code whi 15 // the overflow Kunit tests have some code which intentionally does not use 16 // the macros, so we want to ignore this code 16 // the macros, so we want to ignore this code when reporting potential 17 // issues. 17 // issues. 18 @overflow_tests@ 18 @overflow_tests@ 19 identifier f = overflow_size_helpers_test; 19 identifier f = overflow_size_helpers_test; 20 @@ 20 @@ 21 21 22 f 22 f 23 23 24 //-------------------------------------------- 24 //---------------------------------------------------------- 25 // For context mode 25 // For context mode 26 //-------------------------------------------- 26 //---------------------------------------------------------- 27 27 28 @depends on !overflow_tests && context@ 28 @depends on !overflow_tests && context@ 29 expression E1, E2; 29 expression E1, E2; 30 identifier m; 30 identifier m; 31 @@ 31 @@ 32 ( 32 ( 33 * (sizeof(*E1) + (E2 * sizeof(*E1->m))) 33 * (sizeof(*E1) + (E2 * sizeof(*E1->m))) 34 ) 34 ) 35 35 36 //-------------------------------------------- 36 //---------------------------------------------------------- 37 // For patch mode 37 // For patch mode 38 //-------------------------------------------- 38 //---------------------------------------------------------- 39 39 40 @depends on !overflow_tests && patch@ 40 @depends on !overflow_tests && patch@ 41 expression E1, E2; 41 expression E1, E2; 42 identifier m; 42 identifier m; 43 @@ 43 @@ 44 ( 44 ( 45 - (sizeof(*E1) + (E2 * sizeof(*E1->m))) 45 - (sizeof(*E1) + (E2 * sizeof(*E1->m))) 46 + struct_size(E1, m, E2) 46 + struct_size(E1, m, E2) 47 ) 47 ) 48 48 49 //-------------------------------------------- 49 //---------------------------------------------------------- 50 // For org and report mode 50 // For org and report mode 51 //-------------------------------------------- 51 //---------------------------------------------------------- 52 52 53 @r depends on !overflow_tests && (org || repor 53 @r depends on !overflow_tests && (org || report)@ 54 expression E1, E2; 54 expression E1, E2; 55 identifier m; 55 identifier m; 56 position p; 56 position p; 57 @@ 57 @@ 58 ( 58 ( 59 (sizeof(*E1)@p + (E2 * sizeof(*E1->m))) 59 (sizeof(*E1)@p + (E2 * sizeof(*E1->m))) 60 ) 60 ) 61 61 62 @script:python depends on org@ 62 @script:python depends on org@ 63 p << r.p; 63 p << r.p; 64 @@ 64 @@ 65 65 66 coccilib.org.print_todo(p[0], "WARNING should 66 coccilib.org.print_todo(p[0], "WARNING should use struct_size") 67 67 68 @script:python depends on report@ 68 @script:python depends on report@ 69 p << r.p; 69 p << r.p; 70 @@ 70 @@ 71 71 72 msg="WARNING: Use struct_size" 72 msg="WARNING: Use struct_size" 73 coccilib.report.print_report(p[0], msg) 73 coccilib.report.print_report(p[0], msg) 74 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.