Nicolas Palix | 0341745 | 2010-08-24 17:39:07 +0200 | [diff] [blame] | 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 | - } |