1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /// 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)
|