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 16virtual patch 17virtual context 18virtual org 19virtual report 20 21//---------------------------------------------------------- 22// For context mode 23//---------------------------------------------------------- 24 25@depends on context disable sizeof_type_expr@ 26type T; 27T **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@ 40type T; 41T **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@ 55type T; 56T **x; 57position p; 58@@ 59 60 x = 61 <+...sizeof( 62 T@p 63 )...+> 64 65@script:python depends on org@ 66p << r.p; 67@@ 68 69coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type") 70 71@script:python depends on report@ 72p << r.p; 73@@ 74 75msg="WARNING: Use correct pointer type argument for sizeof" 76coccilib.report.print_report(p[0], msg) 77 78