123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /// Find uses of standard freeing functons on values allocated using devm_
- /// functions. Values allocated using the devm_functions are freed when
- /// the device is detached, and thus the use of the standard freeing
- /// function would cause a double free.
- /// See Documentation/driver-model/devres.txt for more information.
- ///
- /// A difficulty of detecting this problem is that the standard freeing
- /// function might be called from a different function than the one
- /// containing the allocation function. It is thus necessary to make the
- /// connection between the allocation function and the freeing function.
- /// Here this is done using the specific argument text, which is prone to
- /// false positives. There is no rule for the request_region and
- /// request_mem_region variants because this heuristic seems to be a bit
- /// less reliable in these cases.
- ///
- // Confidence: Moderate
- // Copyright: (C) 2011 Julia Lawall, INRIA/LIP6. GPLv2.
- // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2.
- // URL: http://coccinelle.lip6.fr/
- // Comments:
- // Options: --no-includes --include-headers
- virtual org
- virtual report
- virtual context
- @r depends on context || org || report@
- expression x;
- @@
- (
- x = devm_kzalloc(...)
- |
- x = devm_request_irq(...)
- |
- x = devm_ioremap(...)
- |
- x = devm_ioremap_nocache(...)
- |
- x = devm_ioport_map(...)
- )
- @pb@
- expression r.x;
- position p;
- @@
- (
- * kfree@p(x)
- |
- * free_irq@p(x)
- |
- * iounmap@p(x)
- |
- * ioport_unmap@p(x)
- )
- @script:python depends on org@
- p << pb.p;
- @@
- msg="WARNING: invalid free of devm_ allocated data"
- coccilib.org.print_todo(p[0], msg)
- @script:python depends on report@
- p << pb.p;
- @@
- msg="WARNING: invalid free of devm_ allocated data"
- coccilib.report.print_report(p[0], msg)
|