Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
[pandora-kernel.git] / scripts / coccinelle / api / memdup_user.cocci
1 /// Use kmemdup_user rather than duplicating its implementation
2 /// This is a little bit restricted to reduce false positives
3 ///
4 // Confidence: High
5 // Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
6 // Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
7 // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
8 // URL: http://coccinelle.lip6.fr/
9 // Comments:
10 // Options: -no_includes -include_headers
11
12 virtual patch
13
14 @@
15 expression from,to,size,flag;
16 position p;
17 identifier l1,l2;
18 @@
19
20 -  to = \(kmalloc@p\|kzalloc@p\)(size,flag);
21 +  to = memdup_user(from,size);
22    if (
23 -      to==NULL
24 +      IS_ERR(to)
25                  || ...) {
26    <+... when != goto l1;
27 -  -ENOMEM
28 +  PTR_ERR(to)
29    ...+>
30    }
31 -  if (copy_from_user(to, from, size) != 0) {
32 -    <+... when != goto l2;
33 -    -EFAULT
34 -    ...+>
35 -  }