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