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