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

list_entry_update.cocci (1437B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/// list_for_each_entry uses its first argument to get from one element of
      3/// the list to the next, so it is usually not a good idea to reassign it.
      4/// The first rule finds such a reassignment and the second rule checks
      5/// that there is a path from the reassignment back to the top of the loop.
      6///
      7// Confidence: High
      8// Copyright: (C) 2010 Nicolas Palix, DIKU.
      9// Copyright: (C) 2010 Julia Lawall, DIKU.
     10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
     11// URL: http://coccinelle.lip6.fr/
     12// Comments:
     13// Options: --no-includes --include-headers
     14
     15virtual context
     16virtual org
     17virtual report
     18
     19@r exists@
     20iterator name list_for_each_entry;
     21expression x,E;
     22position p1,p2;
     23@@
     24
     25list_for_each_entry@p1(x,...) { <... x =@p2 E ...> }
     26
     27@depends on context && !org && !report@
     28expression x,E;
     29position r.p1,r.p2;
     30statement S;
     31@@
     32
     33*x =@p2 E
     34...
     35list_for_each_entry@p1(x,...) S
     36
     37// ------------------------------------------------------------------------
     38
     39@back depends on (org || report) && !context exists@
     40expression x,E;
     41position r.p1,r.p2;
     42statement S;
     43@@
     44
     45x =@p2 E
     46...
     47list_for_each_entry@p1(x,...) S
     48
     49@script:python depends on back && org@
     50p1 << r.p1;
     51p2 << r.p2;
     52@@
     53
     54cocci.print_main("iterator",p1)
     55cocci.print_secs("update",p2)
     56
     57@script:python depends on back && report@
     58p1 << r.p1;
     59p2 << r.p2;
     60@@
     61
     62msg = "iterator with update on line %s" % (p2[0].line)
     63coccilib.report.print_report(p1[0],msg)