1 // SPDX-License-Identifier: GPL-2.0-only !! 1 /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element 2 /// Correct the size argument to alloc functio << 3 /// 2 /// 4 //# This makes an effort to find cases where t 3 //# This makes an effort to find cases where the argument to sizeof is wrong 5 //# in memory allocation functions by checking 4 //# in memory allocation functions by checking the type of the allocated memory 6 //# when it is a double pointer and ensuring t 5 //# when it is a double pointer and ensuring the sizeof argument takes a pointer 7 //# to the the memory being allocated. There a 6 //# to the the memory being allocated. There are false positives in cases the 8 //# sizeof argument is not used in constructin 7 //# sizeof argument is not used in constructing the return value. The result 9 //# may need some reformatting. 8 //# may need some reformatting. 10 // 9 // 11 // Confidence: Moderate 10 // Confidence: Moderate 12 // Copyright: (C) 2014 Himangi Saraogi. !! 11 // Copyright: (C) 2014 Himangi Saraogi. GPLv2. 13 // Comments: 12 // Comments: 14 // Options: 13 // Options: 15 14 16 virtual patch 15 virtual patch 17 virtual context 16 virtual context 18 virtual org 17 virtual org 19 virtual report 18 virtual report 20 19 21 //-------------------------------------------- 20 //---------------------------------------------------------- 22 // For context mode 21 // For context mode 23 //-------------------------------------------- 22 //---------------------------------------------------------- 24 23 25 @depends on context disable sizeof_type_expr@ 24 @depends on context disable sizeof_type_expr@ 26 type T; 25 type T; 27 T **x; 26 T **x; 28 @@ 27 @@ 29 28 30 x = 29 x = 31 <+...sizeof( 30 <+...sizeof( 32 * T 31 * T 33 )...+> 32 )...+> 34 33 35 //-------------------------------------------- 34 //---------------------------------------------------------- 36 // For patch mode 35 // For patch mode 37 //-------------------------------------------- 36 //---------------------------------------------------------- 38 37 39 @depends on patch disable sizeof_type_expr@ 38 @depends on patch disable sizeof_type_expr@ 40 type T; 39 type T; 41 T **x; 40 T **x; 42 @@ 41 @@ 43 42 44 x = 43 x = 45 <+...sizeof( 44 <+...sizeof( 46 - T 45 - T 47 + *x 46 + *x 48 )...+> 47 )...+> 49 48 50 //-------------------------------------------- 49 //---------------------------------------------------------- 51 // For org and report mode 50 // For org and report mode 52 //-------------------------------------------- 51 //---------------------------------------------------------- 53 52 54 @r depends on (org || report) disable sizeof_t !! 53 @r disable sizeof_type_expr@ 55 type T; 54 type T; 56 T **x; 55 T **x; 57 position p; 56 position p; 58 @@ 57 @@ 59 58 60 x = 59 x = 61 <+...sizeof( 60 <+...sizeof( 62 T@p 61 T@p 63 )...+> 62 )...+> 64 63 65 @script:python depends on org@ 64 @script:python depends on org@ 66 p << r.p; 65 p << r.p; 67 @@ 66 @@ 68 67 69 coccilib.org.print_todo(p[0], "WARNING sizeof 68 coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type") 70 69 71 @script:python depends on report@ 70 @script:python depends on report@ 72 p << r.p; 71 p << r.p; 73 @@ 72 @@ 74 73 75 msg="WARNING: Use correct pointer type argumen 74 msg="WARNING: Use correct pointer type argument for sizeof" 76 coccilib.report.print_report(p[0], msg) 75 coccilib.report.print_report(p[0], msg) 77 76
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.