1 // SPDX-License-Identifier: GPL-2.0-only << 2 /// Use kmemdup rather than duplicating its im 1 /// Use kmemdup rather than duplicating its implementation 3 /// 2 /// 4 // Confidence: High 3 // Confidence: High 5 // Copyright: (C) 2010-2012 Nicolas Palix. !! 4 // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 6 // Copyright: (C) 2010-2012 Julia Lawall, INRI !! 5 // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 7 // Copyright: (C) 2010-2012 Gilles Muller, INR !! 6 // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 8 // URL: https://coccinelle.gitlabpages.inria.f !! 7 // URL: http://coccinelle.lip6.fr/ 9 // Comments: 8 // Comments: 10 // Options: --no-includes --include-headers 9 // Options: --no-includes --include-headers 11 10 12 virtual patch 11 virtual patch 13 virtual context 12 virtual context 14 virtual org 13 virtual org 15 virtual report 14 virtual report 16 15 17 @r1@ 16 @r1@ 18 expression from,to; 17 expression from,to; 19 expression flag; 18 expression flag; 20 position p; 19 position p; 21 @@ 20 @@ 22 21 23 to = \(kmalloc@p\|kzalloc@p\)(strlen(from) 22 to = \(kmalloc@p\|kzalloc@p\)(strlen(from) + 1,flag); 24 23 25 @r2@ 24 @r2@ 26 expression x,from,to; 25 expression x,from,to; 27 expression flag,E1; 26 expression flag,E1; 28 position p; 27 position p; 29 @@ 28 @@ 30 29 31 x = strlen(from) + 1; 30 x = strlen(from) + 1; 32 ... when != \( x = E1 \| from = E1 \) 31 ... when != \( x = E1 \| from = E1 \) 33 to = \(kmalloc@p\|kzalloc@p\)(x,flag); 32 to = \(kmalloc@p\|kzalloc@p\)(x,flag); 34 33 35 @depends on patch@ 34 @depends on patch@ 36 expression from,to,size,flag; 35 expression from,to,size,flag; 37 position p != {r1.p,r2.p}; 36 position p != {r1.p,r2.p}; 38 statement S; 37 statement S; 39 @@ 38 @@ 40 39 41 - to = \(kmalloc@p\|kzalloc@p\)(size,flag); 40 - to = \(kmalloc@p\|kzalloc@p\)(size,flag); 42 + to = kmemdup(from,size,flag); 41 + to = kmemdup(from,size,flag); 43 if (to==NULL || ...) S 42 if (to==NULL || ...) S 44 - memcpy(to, from, size); 43 - memcpy(to, from, size); 45 44 46 @r depends on !patch@ 45 @r depends on !patch@ 47 expression from,to,size,flag; 46 expression from,to,size,flag; 48 position p != {r1.p,r2.p}; 47 position p != {r1.p,r2.p}; 49 statement S; 48 statement S; 50 @@ 49 @@ 51 50 52 * to = \(kmalloc@p\|kzalloc@p\)(size,flag); 51 * to = \(kmalloc@p\|kzalloc@p\)(size,flag); 53 if (to==NULL || ...) S 52 if (to==NULL || ...) S 54 * memcpy(to, from, size); 53 * memcpy(to, from, size); 55 54 56 @script:python depends on org@ 55 @script:python depends on org@ 57 p << r.p; 56 p << r.p; 58 @@ 57 @@ 59 58 60 coccilib.org.print_todo(p[0], "WARNING opportu 59 coccilib.org.print_todo(p[0], "WARNING opportunity for kmemdup") 61 60 62 @script:python depends on report@ 61 @script:python depends on report@ 63 p << r.p; 62 p << r.p; 64 @@ 63 @@ 65 64 66 coccilib.report.print_report(p[0], "WARNING op 65 coccilib.report.print_report(p[0], "WARNING opportunity for kmemdup")
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.