Commit cf5842de75e9fb8044ff5ca73050e361daa6aae4

Authored by Nicolas Palix
Committed by Michal Marek
1 parent 51169c8015

Add scripts/coccinelle/alloc/kzalloc-simple.cocci

This semantic patch replaces a pair of calls to kmalloc and memset
by a single call to kzalloc.

It only looks for simple cases to avoid false positives.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Michal Marek <mmarek@suse.cz>

Showing 1 changed file with 82 additions and 0 deletions Side-by-side Diff

scripts/coccinelle/alloc/kzalloc-simple.cocci
  1 +///
  2 +/// kzalloc should be used rather than kmalloc followed by memset 0
  3 +///
  4 +// Confidence: High
  5 +// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2.
  6 +// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2.
  7 +// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
  8 +// Options: -no_includes -include_headers
  9 +//
  10 +// Keywords: kmalloc, kzalloc
  11 +// Version min: < 2.6.12 kmalloc
  12 +// Version min: 2.6.14 kzalloc
  13 +//
  14 +
  15 +virtual context
  16 +virtual patch
  17 +virtual org
  18 +virtual report
  19 +
  20 +//----------------------------------------------------------
  21 +// For context mode
  22 +//----------------------------------------------------------
  23 +
  24 +@depends on context@
  25 +type T, T2;
  26 +expression x;
  27 +expression E1,E2;
  28 +statement S;
  29 +@@
  30 +
  31 +* x = (T)kmalloc(E1,E2);
  32 + if ((x==NULL) || ...) S
  33 +* memset((T2)x,0,E1);
  34 +
  35 +//----------------------------------------------------------
  36 +// For patch mode
  37 +//----------------------------------------------------------
  38 +
  39 +@depends on patch@
  40 +type T, T2;
  41 +expression x;
  42 +expression E1,E2;
  43 +statement S;
  44 +@@
  45 +
  46 +- x = (T)kmalloc(E1,E2);
  47 ++ x = kzalloc(E1,E2);
  48 + if ((x==NULL) || ...) S
  49 +- memset((T2)x,0,E1);
  50 +
  51 +//----------------------------------------------------------
  52 +// For org mode
  53 +//----------------------------------------------------------
  54 +
  55 +@r depends on org || report@
  56 +type T, T2;
  57 +expression x;
  58 +expression E1,E2;
  59 +statement S;
  60 +position p;
  61 +@@
  62 +
  63 + x = (T)kmalloc@p(E1,E2);
  64 + if ((x==NULL) || ...) S
  65 + memset((T2)x,0,E1);
  66 +
  67 +@script:python depends on org@
  68 +p << r.p;
  69 +x << r.x;
  70 +@@
  71 +
  72 +msg="%s" % (x)
  73 +msg_safe=msg.replace("[","@(").replace("]",")")
  74 +coccilib.org.print_todo(p[0], msg_safe)
  75 +
  76 +@script:python depends on report@
  77 +p << r.p;
  78 +x << r.x;
  79 +@@
  80 +
  81 +msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
  82 +coccilib.report.print_report(p[0], msg)