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

d_find_alias.cocci (1309B)


      1// SPDX-License-Identifier: GPL-2.0
      2/// Make sure calls to d_find_alias() have a corresponding call to dput().
      3//
      4// Keywords: d_find_alias, dput
      5//
      6// Confidence: Moderate
      7// URL: http://coccinelle.lip6.fr/
      8// Options: --include-headers
      9
     10virtual context
     11virtual org
     12virtual patch
     13virtual report
     14
     15@r exists@
     16local idexpression struct dentry *dent;
     17expression E, E1;
     18statement S1, S2;
     19position p1, p2;
     20@@
     21(
     22	if (!(dent@p1 = d_find_alias(...))) S1
     23|
     24	dent@p1 = d_find_alias(...)
     25)
     26
     27<...when != dput(dent)
     28    when != if (...) { <+... dput(dent) ...+> }
     29    when != true !dent || ...
     30    when != dent = E
     31    when != E = dent
     32if (!dent || ...) S2
     33...>
     34(
     35	return <+...dent...+>;
     36|
     37	return @p2 ...;
     38|
     39	dent@p2 = E1;
     40|
     41	E1 = dent;
     42)
     43
     44@depends on context@
     45local idexpression struct dentry *r.dent;
     46position r.p1,r.p2;
     47@@
     48* dent@p1 = ...
     49  ...
     50(
     51* return@p2 ...;
     52|
     53* dent@p2
     54)
     55
     56
     57@script:python depends on org@
     58p1 << r.p1;
     59p2 << r.p2;
     60@@
     61cocci.print_main("Missing call to dput()",p1)
     62cocci.print_secs("",p2)
     63
     64@depends on patch@
     65local idexpression struct dentry *r.dent;
     66position r.p2;
     67@@
     68(
     69+ dput(dent);
     70  return @p2 ...;
     71|
     72+ dput(dent);
     73  dent@p2 = ...;
     74)
     75
     76@script:python depends on report@
     77p1 << r.p1;
     78p2 << r.p2;
     79@@
     80msg = "Missing call to dput() at line %s."
     81coccilib.report.print_report(p1[0], msg % (p2[0].line))