xref: /openbmc/u-boot/scripts/coccinelle/misc/badty.cocci (revision 06feb5d0bf9953c6918d0e35feef64521c5236c4)
1*06feb5d0SHeinrich Schuchardt/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
2*06feb5d0SHeinrich Schuchardt///
3*06feb5d0SHeinrich Schuchardt//# This makes an effort to find cases where the argument to sizeof is wrong
4*06feb5d0SHeinrich Schuchardt//# in memory allocation functions by checking the type of the allocated memory
5*06feb5d0SHeinrich Schuchardt//# when it is a double pointer and ensuring the sizeof argument takes a pointer
6*06feb5d0SHeinrich Schuchardt//# to the the memory being allocated. There are false positives in cases the
7*06feb5d0SHeinrich Schuchardt//# sizeof argument is not used in constructing the return value. The result
8*06feb5d0SHeinrich Schuchardt//# may need some reformatting.
9*06feb5d0SHeinrich Schuchardt//
10*06feb5d0SHeinrich Schuchardt// Confidence: Moderate
11*06feb5d0SHeinrich Schuchardt// Copyright: (C) 2014 Himangi Saraogi.  GPLv2.
12*06feb5d0SHeinrich Schuchardt// Comments:
13*06feb5d0SHeinrich Schuchardt// Options:
14*06feb5d0SHeinrich Schuchardt
15*06feb5d0SHeinrich Schuchardtvirtual patch
16*06feb5d0SHeinrich Schuchardtvirtual context
17*06feb5d0SHeinrich Schuchardtvirtual org
18*06feb5d0SHeinrich Schuchardtvirtual report
19*06feb5d0SHeinrich Schuchardt
20*06feb5d0SHeinrich Schuchardt//----------------------------------------------------------
21*06feb5d0SHeinrich Schuchardt//  For context mode
22*06feb5d0SHeinrich Schuchardt//----------------------------------------------------------
23*06feb5d0SHeinrich Schuchardt
24*06feb5d0SHeinrich Schuchardt@depends on context disable sizeof_type_expr@
25*06feb5d0SHeinrich Schuchardttype T;
26*06feb5d0SHeinrich SchuchardtT **x;
27*06feb5d0SHeinrich Schuchardt@@
28*06feb5d0SHeinrich Schuchardt
29*06feb5d0SHeinrich Schuchardt  x =
30*06feb5d0SHeinrich Schuchardt  <+...sizeof(
31*06feb5d0SHeinrich Schuchardt* T
32*06feb5d0SHeinrich Schuchardt  )...+>
33*06feb5d0SHeinrich Schuchardt
34*06feb5d0SHeinrich Schuchardt//----------------------------------------------------------
35*06feb5d0SHeinrich Schuchardt//  For patch mode
36*06feb5d0SHeinrich Schuchardt//----------------------------------------------------------
37*06feb5d0SHeinrich Schuchardt
38*06feb5d0SHeinrich Schuchardt@depends on patch disable sizeof_type_expr@
39*06feb5d0SHeinrich Schuchardttype T;
40*06feb5d0SHeinrich SchuchardtT **x;
41*06feb5d0SHeinrich Schuchardt@@
42*06feb5d0SHeinrich Schuchardt
43*06feb5d0SHeinrich Schuchardt  x =
44*06feb5d0SHeinrich Schuchardt  <+...sizeof(
45*06feb5d0SHeinrich Schuchardt- T
46*06feb5d0SHeinrich Schuchardt+ *x
47*06feb5d0SHeinrich Schuchardt  )...+>
48*06feb5d0SHeinrich Schuchardt
49*06feb5d0SHeinrich Schuchardt//----------------------------------------------------------
50*06feb5d0SHeinrich Schuchardt//  For org and report mode
51*06feb5d0SHeinrich Schuchardt//----------------------------------------------------------
52*06feb5d0SHeinrich Schuchardt
53*06feb5d0SHeinrich Schuchardt@r depends on (org || report) disable sizeof_type_expr@
54*06feb5d0SHeinrich Schuchardttype T;
55*06feb5d0SHeinrich SchuchardtT **x;
56*06feb5d0SHeinrich Schuchardtposition p;
57*06feb5d0SHeinrich Schuchardt@@
58*06feb5d0SHeinrich Schuchardt
59*06feb5d0SHeinrich Schuchardt  x =
60*06feb5d0SHeinrich Schuchardt  <+...sizeof(
61*06feb5d0SHeinrich Schuchardt  T@p
62*06feb5d0SHeinrich Schuchardt  )...+>
63*06feb5d0SHeinrich Schuchardt
64*06feb5d0SHeinrich Schuchardt@script:python depends on org@
65*06feb5d0SHeinrich Schuchardtp << r.p;
66*06feb5d0SHeinrich Schuchardt@@
67*06feb5d0SHeinrich Schuchardt
68*06feb5d0SHeinrich Schuchardtcoccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type")
69*06feb5d0SHeinrich Schuchardt
70*06feb5d0SHeinrich Schuchardt@script:python depends on report@
71*06feb5d0SHeinrich Schuchardtp << r.p;
72*06feb5d0SHeinrich Schuchardt@@
73*06feb5d0SHeinrich Schuchardt
74*06feb5d0SHeinrich Schuchardtmsg="WARNING: Use correct pointer type argument for sizeof"
75*06feb5d0SHeinrich Schuchardtcoccilib.report.print_report(p[0], msg)
76*06feb5d0SHeinrich Schuchardt
77