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- } 36