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

put_device.cocci (1336B)


      1// SPDX-License-Identifier: GPL-2.0
      2/// Find missing put_device for every of_find_device_by_node.
      3///
      4// Confidence: Moderate
      5// Copyright: (C) 2018-2019 Wen Yang, ZTE.
      6// Comments:
      7// Options: --no-includes --include-headers
      8
      9virtual report
     10virtual org
     11
     12@search exists@
     13local idexpression id;
     14expression x,e,e1;
     15position p1,p2;
     16type T,T1,T2,T3;
     17@@
     18
     19id = of_find_device_by_node@p1(x)
     20... when != e = id
     21if (id == NULL || ...) { ... return ...; }
     22... when != put_device(&id->dev)
     23    when != platform_device_put(id)
     24    when != if (id) { ... put_device(&id->dev) ... }
     25    when != e1 = (T)id
     26    when != e1 = (T)(&id->dev)
     27    when != e1 = get_device(&id->dev)
     28    when != e1 = (T1)platform_get_drvdata(id)
     29(
     30  return
     31(    id
     32|    (T2)dev_get_drvdata(&id->dev)
     33|    (T3)platform_get_drvdata(id)
     34|    &id->dev
     35);
     36| return@p2 ...;
     37)
     38
     39@script:python depends on report@
     40p1 << search.p1;
     41p2 << search.p2;
     42@@
     43
     44coccilib.report.print_report(p2[0],
     45                             "ERROR: missing put_device; call of_find_device_by_node on line "
     46                             + p1[0].line
     47                             + ", but without a corresponding object release within this function.")
     48
     49@script:python depends on org@
     50p1 << search.p1;
     51p2 << search.p2;
     52@@
     53
     54cocci.print_main("of_find_device_by_node", p1)
     55cocci.print_secs("needed put_device", p2)