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