1 // SPDX-License-Identifier: GPL-2.0-only 2 /// Use kstrdup 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 12 virtual patch 13 virtual context 14 virtual org 15 virtual report 16 17 @depends on patch@ 18 expression from,to; 19 expression flag,E1,E2; 20 statement S; 21 @@ 22 23 - to = kmalloc(strlen(from) + 1,flag); 24 + to = kstrdup(from, flag); 25 ... when != \(from = E1 \| to = E1 \) 26 if (to==NULL || ...) S 27 ... when != \(from = E2 \| to = E2 \) 28 - strcpy(to, from); 29 30 @depends on patch@ 31 expression x,from,to; 32 expression flag,E1,E2,E3; 33 statement S; 34 @@ 35 36 - x = strlen(from) + 1; 37 ... when != \( x = E1 \| from = E1 \) 38 - to = \(kmalloc\|kzalloc\)(x,flag); 39 + to = kstrdup(from, flag); 40 ... when != \(x = E2 \| from = E2 \| to = E2 \) 41 if (to==NULL || ...) S 42 ... when != \(x = E3 \| from = E3 \| to = E3 \) 43 - memcpy(to, from, x); 44 45 // --------------------------------------------------------------------- 46 47 @r1 depends on !patch exists@ 48 expression from,to; 49 expression flag,E1,E2; 50 statement S; 51 position p1,p2; 52 @@ 53 54 * to = kmalloc@p1(strlen(from) + 1,flag); 55 ... when != \(from = E1 \| to = E1 \) 56 if (to==NULL || ...) S 57 ... when != \(from = E2 \| to = E2 \) 58 * strcpy@p2(to, from); 59 60 @r2 depends on !patch exists@ 61 expression x,from,to; 62 expression flag,E1,E2,E3; 63 statement S; 64 position p1,p2; 65 @@ 66 67 * x = strlen(from) + 1; 68 ... when != \( x = E1 \| from = E1 \) 69 * to = \(kmalloc@p1\|kzalloc@p1\)(x,flag); 70 ... when != \(x = E2 \| from = E2 \| to = E2 \) 71 if (to==NULL || ...) S 72 ... when != \(x = E3 \| from = E3 \| to = E3 \) 73 * memcpy@p2(to, from, x); 74 75 @script:python depends on org@ 76 p1 << r1.p1; 77 p2 << r1.p2; 78 @@ 79 80 cocci.print_main("WARNING opportunity for kstrdup",p1) 81 cocci.print_secs("strcpy",p2) 82 83 @script:python depends on org@ 84 p1 << r2.p1; 85 p2 << r2.p2; 86 @@ 87 88 cocci.print_main("WARNING opportunity for kstrdup",p1) 89 cocci.print_secs("memcpy",p2) 90 91 @script:python depends on report@ 92 p1 << r1.p1; 93 p2 << r1.p2; 94 @@ 95 96 msg = "WARNING opportunity for kstrdup (strcpy on line %s)" % (p2[0].line) 97 coccilib.report.print_report(p1[0], msg) 98 99 @script:python depends on report@ 100 p1 << r2.p1; 101 p2 << r2.p2; 102 @@ 103 104 msg = "WARNING opportunity for kstrdup (memcpy on line %s)" % (p2[0].line) 105 coccilib.report.print_report(p1[0], msg)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.