diff options
Diffstat (limited to 'scripts/coccinelle/api/memdup_user.cocci')
| -rw-r--r-- | scripts/coccinelle/api/memdup_user.cocci | 41 | 
1 files changed, 33 insertions, 8 deletions
diff --git a/scripts/coccinelle/api/memdup_user.cocci b/scripts/coccinelle/api/memdup_user.cocci index 72ce012e878..c606231b0e4 100644 --- a/scripts/coccinelle/api/memdup_user.cocci +++ b/scripts/coccinelle/api/memdup_user.cocci @@ -1,23 +1,25 @@ -/// Use kmemdup_user rather than duplicating its implementation +/// Use memdup_user rather than duplicating its implementation  /// This is a little bit restricted to reduce false positives  ///  // Confidence: High -// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2. -// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2. -// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2. +// Copyright: (C) 2010-2012 Nicolas Palix.  GPLv2. +// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.  GPLv2. +// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.  GPLv2.  // URL: http://coccinelle.lip6.fr/  // Comments: -// Options: -no_includes -include_headers +// Options: --no-includes --include-headers  virtual patch +virtual context +virtual org +virtual report -@@ +@depends on patch@  expression from,to,size,flag; -position p;  identifier l1,l2;  @@ --  to = \(kmalloc@p\|kzalloc@p\)(size,flag); +-  to = \(kmalloc\|kzalloc\)(size,flag);  +  to = memdup_user(from,size);     if (  -      to==NULL @@ -33,3 +35,26 @@ identifier l1,l2;  -    -EFAULT  -    ...+>  -  } + +@r depends on !patch@ +expression from,to,size,flag; +position p; +statement S1,S2; +@@ + +*  to = \(kmalloc@p\|kzalloc@p\)(size,flag); +   if (to==NULL || ...) S1 +   if (copy_from_user(to, from, size) != 0) +   S2 + +@script:python depends on org@ +p << r.p; +@@ + +coccilib.org.print_todo(p[0], "WARNING opportunity for memdup_user") + +@script:python depends on report@ +p << r.p; +@@ + +coccilib.report.print_report(p[0], "WARNING opportunity for memdup_user")  | 
