cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kstrdup.cocci (2478B)


      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: http://coccinelle.lip6.fr/
      9// Comments:
     10// Options: --no-includes --include-headers
     11
     12virtual patch
     13virtual context
     14virtual org
     15virtual report
     16
     17@depends on patch@
     18expression from,to;
     19expression flag,E1,E2;
     20statement 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@
     31expression x,from,to;
     32expression flag,E1,E2,E3;
     33statement 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@
     48expression from,to;
     49expression flag,E1,E2;
     50statement S;
     51position 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@
     61expression x,from,to;
     62expression flag,E1,E2,E3;
     63statement S;
     64position 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@
     76p1 << r1.p1;
     77p2 << r1.p2;
     78@@
     79
     80cocci.print_main("WARNING opportunity for kstrdup",p1)
     81cocci.print_secs("strcpy",p2)
     82
     83@script:python depends on org@
     84p1 << r2.p1;
     85p2 << r2.p2;
     86@@
     87
     88cocci.print_main("WARNING opportunity for kstrdup",p1)
     89cocci.print_secs("memcpy",p2)
     90
     91@script:python depends on report@
     92p1 << r1.p1;
     93p2 << r1.p2;
     94@@
     95
     96msg = "WARNING opportunity for kstrdup (strcpy on line %s)" % (p2[0].line)
     97coccilib.report.print_report(p1[0], msg)
     98
     99@script:python depends on report@
    100p1 << r2.p1;
    101p2 << r2.p2;
    102@@
    103
    104msg = "WARNING opportunity for kstrdup (memcpy on line %s)" % (p2[0].line)
    105coccilib.report.print_report(p1[0], msg)