Linux Audio

Check our new training course

Loading...
 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
12virtual patch
13
14@@
15expression from,to,size,flag;
16position p;
17identifier 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-  }