162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/// Use kmemdup rather than duplicating its implementation 362306a36Sopenharmony_ci/// 462306a36Sopenharmony_ci// Confidence: High 562306a36Sopenharmony_ci// Copyright: (C) 2010-2012 Nicolas Palix. 662306a36Sopenharmony_ci// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. 762306a36Sopenharmony_ci// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. 862306a36Sopenharmony_ci// URL: https://coccinelle.gitlabpages.inria.fr/website 962306a36Sopenharmony_ci// Comments: 1062306a36Sopenharmony_ci// Options: --no-includes --include-headers 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_civirtual patch 1362306a36Sopenharmony_civirtual context 1462306a36Sopenharmony_civirtual org 1562306a36Sopenharmony_civirtual report 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci@r1@ 1862306a36Sopenharmony_ciexpression from,to; 1962306a36Sopenharmony_ciexpression flag; 2062306a36Sopenharmony_ciposition p; 2162306a36Sopenharmony_ci@@ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci to = \(kmalloc@p\|kzalloc@p\)(strlen(from) + 1,flag); 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci@r2@ 2662306a36Sopenharmony_ciexpression x,from,to; 2762306a36Sopenharmony_ciexpression flag,E1; 2862306a36Sopenharmony_ciposition p; 2962306a36Sopenharmony_ci@@ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci x = strlen(from) + 1; 3262306a36Sopenharmony_ci ... when != \( x = E1 \| from = E1 \) 3362306a36Sopenharmony_ci to = \(kmalloc@p\|kzalloc@p\)(x,flag); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci@depends on patch@ 3662306a36Sopenharmony_ciexpression from,to,size,flag; 3762306a36Sopenharmony_ciposition p != {r1.p,r2.p}; 3862306a36Sopenharmony_cistatement S; 3962306a36Sopenharmony_ci@@ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci- to = \(kmalloc@p\|kzalloc@p\)(size,flag); 4262306a36Sopenharmony_ci+ to = kmemdup(from,size,flag); 4362306a36Sopenharmony_ci if (to==NULL || ...) S 4462306a36Sopenharmony_ci- memcpy(to, from, size); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci@r depends on !patch@ 4762306a36Sopenharmony_ciexpression from,to,size,flag; 4862306a36Sopenharmony_ciposition p != {r1.p,r2.p}; 4962306a36Sopenharmony_cistatement S; 5062306a36Sopenharmony_ci@@ 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci* to = \(kmalloc@p\|kzalloc@p\)(size,flag); 5362306a36Sopenharmony_ci if (to==NULL || ...) S 5462306a36Sopenharmony_ci* memcpy(to, from, size); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci@script:python depends on org@ 5762306a36Sopenharmony_cip << r.p; 5862306a36Sopenharmony_ci@@ 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cicoccilib.org.print_todo(p[0], "WARNING opportunity for kmemdup") 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci@script:python depends on report@ 6362306a36Sopenharmony_cip << r.p; 6462306a36Sopenharmony_ci@@ 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cicoccilib.report.print_report(p[0], "WARNING opportunity for kmemdup") 67