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

device_node_continue.cocci (2154B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/// Device node iterators put the previous value of the index variable, so an
      3/// explicit put causes a double put.
      4///
      5// Confidence: High
      6// Copyright: (C) 2015 Julia Lawall, Inria.
      7// URL: http://coccinelle.lip6.fr/
      8// Options: --no-includes --include-headers
      9// Requires: 1.0.4
     10// Keywords: for_each_child_of_node, etc.
     11
     12// This uses a conjunction, which requires at least coccinelle >= 1.0.4
     13
     14virtual patch
     15virtual context
     16virtual org
     17virtual report
     18
     19@r exists@
     20expression e1,e2;
     21local idexpression n;
     22iterator name for_each_node_by_name, for_each_node_by_type,
     23for_each_compatible_node, for_each_matching_node,
     24for_each_matching_node_and_match, for_each_child_of_node,
     25for_each_available_child_of_node, for_each_node_with_property;
     26iterator i;
     27position p1,p2;
     28statement S;
     29@@
     30
     31(
     32(
     33for_each_node_by_name(n,e1) S
     34|
     35for_each_node_by_type(n,e1) S
     36|
     37for_each_compatible_node(n,e1,e2) S
     38|
     39for_each_matching_node(n,e1) S
     40|
     41for_each_matching_node_and_match(n,e1,e2) S
     42|
     43for_each_child_of_node(e1,n) S
     44|
     45for_each_available_child_of_node(e1,n) S
     46|
     47for_each_node_with_property(n,e1) S
     48)
     49&
     50i@p1(...) {
     51   ... when != of_node_get(n)
     52       when any
     53   of_node_put@p2(n);
     54   ... when any
     55}
     56)
     57
     58@s exists@
     59local idexpression r.n;
     60statement S;
     61position r.p1,r.p2;
     62iterator i;
     63@@
     64
     65 of_node_put@p2(n);
     66 ... when any
     67 i@p1(..., n, ...)
     68 S
     69
     70@t depends on s && patch && !context && !org && !report@
     71local idexpression n;
     72position r.p2;
     73@@
     74
     75- of_node_put@p2(n);
     76
     77// ----------------------------------------------------------------------------
     78
     79@t_context depends on s && !patch && (context || org || report)@
     80local idexpression n;
     81position r.p2;
     82position j0;
     83@@
     84
     85*  of_node_put@j0@p2(n);
     86
     87// ----------------------------------------------------------------------------
     88
     89@script:python t_org depends on org@
     90j0 << t_context.j0;
     91@@
     92
     93msg = "ERROR: probable double put."
     94coccilib.org.print_todo(j0[0], msg)
     95
     96// ----------------------------------------------------------------------------
     97
     98@script:python t_report depends on report@
     99j0 << t_context.j0;
    100@@
    101
    102msg = "ERROR: probable double put."
    103coccilib.report.print_report(j0[0], msg)
    104