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

iounmap.cocci (1285B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/// Find missing iounmaps.
      3///
      4//# This only signals a missing iounmap when there is an iounmap later
      5//# in the same function.
      6//# False positives can be due to loops.
      7//
      8// Confidence: Moderate
      9// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
     10// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
     11// URL: http://coccinelle.lip6.fr/
     12// Comments:
     13// Options:
     14
     15virtual context
     16virtual org
     17virtual report
     18
     19@iom@
     20expression e;
     21statement S,S1;
     22int ret;
     23position p1,p2,p3;
     24@@
     25
     26e = \(ioremap@p1\)(...)
     27... when != iounmap(e)
     28if (<+...e...+>) S
     29... when any
     30    when != iounmap(e)
     31    when != if (...) { ... iounmap(e); ... }
     32(
     33 if (ret == 0) S1
     34|
     35if (...)
     36   { ...
     37     return 0; }
     38|
     39if (...)
     40   { ...
     41     return <+...e...+>; }
     42|
     43*if@p2 (...)
     44   { ... when != iounmap(e)
     45         when forall
     46     return@p3 ...; }
     47)
     48... when any
     49iounmap(e);
     50
     51@script:python depends on org@
     52p1 << iom.p1;
     53p2 << iom.p2;
     54p3 << iom.p3;
     55@@
     56
     57cocci.print_main("ioremap",p1)
     58cocci.print_secs("if",p2)
     59cocci.print_secs("needed iounmap",p3)
     60
     61@script:python depends on report@
     62p1 << iom.p1;
     63p2 << iom.p2;
     64p3 << iom.p3;
     65@@
     66
     67msg = "ERROR: missing iounmap; ioremap on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line)
     68coccilib.report.print_report(p3[0],msg)