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