devm_free.cocci 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /// Find uses of standard freeing functons on values allocated using devm_
  2. /// functions. Values allocated using the devm_functions are freed when
  3. /// the device is detached, and thus the use of the standard freeing
  4. /// function would cause a double free.
  5. /// See Documentation/driver-model/devres.txt for more information.
  6. ///
  7. /// A difficulty of detecting this problem is that the standard freeing
  8. /// function might be called from a different function than the one
  9. /// containing the allocation function. It is thus necessary to make the
  10. /// connection between the allocation function and the freeing function.
  11. /// Here this is done using the specific argument text, which is prone to
  12. /// false positives. There is no rule for the request_region and
  13. /// request_mem_region variants because this heuristic seems to be a bit
  14. /// less reliable in these cases.
  15. ///
  16. // Confidence: Moderate
  17. // Copyright: (C) 2011 Julia Lawall, INRIA/LIP6. GPLv2.
  18. // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2.
  19. // URL: http://coccinelle.lip6.fr/
  20. // Comments:
  21. // Options: --no-includes --include-headers
  22. virtual org
  23. virtual report
  24. virtual context
  25. @r depends on context || org || report@
  26. expression x;
  27. @@
  28. (
  29. x = devm_kmalloc(...)
  30. |
  31. x = devm_kvasprintf(...)
  32. |
  33. x = devm_kasprintf(...)
  34. |
  35. x = devm_kzalloc(...)
  36. |
  37. x = devm_kmalloc_array(...)
  38. |
  39. x = devm_kcalloc(...)
  40. |
  41. x = devm_kstrdup(...)
  42. |
  43. x = devm_kmemdup(...)
  44. |
  45. x = devm_get_free_pages(...)
  46. |
  47. x = devm_request_irq(...)
  48. |
  49. x = devm_ioremap(...)
  50. |
  51. x = devm_ioremap_nocache(...)
  52. |
  53. x = devm_ioport_map(...)
  54. )
  55. @pb@
  56. expression r.x;
  57. position p;
  58. @@
  59. (
  60. * kfree@p(x)
  61. |
  62. * kzfree@p(x)
  63. |
  64. * __krealloc@p(x, ...)
  65. |
  66. * krealloc@p(x, ...)
  67. |
  68. * free_pages@p(x, ...)
  69. |
  70. * free_page@p(x)
  71. |
  72. * free_irq@p(x)
  73. |
  74. * iounmap@p(x)
  75. |
  76. * ioport_unmap@p(x)
  77. )
  78. @script:python depends on org@
  79. p << pb.p;
  80. @@
  81. msg="WARNING: invalid free of devm_ allocated data"
  82. coccilib.org.print_todo(p[0], msg)
  83. @script:python depends on report@
  84. p << pb.p;
  85. @@
  86. msg="WARNING: invalid free of devm_ allocated data"
  87. coccilib.report.print_report(p[0], msg)