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