1/// Use kmemdup rather than duplicating its implementation 2/// 3// Confidence: High 4// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// URL: http://coccinelle.lip6.fr/ 8// Comments: 9// Options: -no_includes -include_headers 10 11virtual patch 12virtual context 13virtual org 14virtual report 15 16@r1@ 17expression from,to; 18expression flag; 19position p; 20@@ 21 22 to = \(kmalloc@p\|kzalloc@p\)(strlen(from) + 1,flag); 23 24@r2@ 25expression x,from,to; 26expression flag,E1; 27position p; 28@@ 29 30 x = strlen(from) + 1; 31 ... when != \( x = E1 \| from = E1 \) 32 to = \(kmalloc@p\|kzalloc@p\)(x,flag); 33 34@depends on patch@ 35expression from,to,size,flag; 36position p != {r1.p,r2.p}; 37statement S; 38@@ 39 40- to = \(kmalloc@p\|kzalloc@p\)(size,flag); 41+ to = kmemdup(from,size,flag); 42 if (to==NULL || ...) S 43- memcpy(to, from, size); 44 45@r depends on !patch@ 46expression from,to,size,flag; 47position p != {r1.p,r2.p}; 48statement S; 49@@ 50 51* to = \(kmalloc@p\|kzalloc@p\)(size,flag); 52 to = kmemdup(from,size,flag); 53 if (to==NULL || ...) S 54* memcpy(to, from, size); 55 56@script:python depends on org@ 57p << r.p; 58@@ 59 60coccilib.org.print_todo(p[0], "WARNING opportunity for kmemdep") 61 62@script:python depends on report@ 63p << r.p; 64@@ 65 66coccilib.report.print_report(p[0], "WARNING opportunity for kmemdep") 67