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