ifnullfree.cocci 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /// NULL check before some freeing functions is not needed.
  3. ///
  4. /// Based on checkpatch warning
  5. /// "kfree(NULL) is safe this check is probably not required"
  6. /// and kfreeaddr.cocci by Julia Lawall.
  7. ///
  8. // Copyright: (C) 2014 Fabian Frederick.
  9. // Comments: -
  10. // Options: --no-includes --include-headers
  11. virtual patch
  12. virtual org
  13. virtual report
  14. virtual context
  15. @r2 depends on patch@
  16. expression E;
  17. @@
  18. - if (E != NULL)
  19. (
  20. kfree(E);
  21. |
  22. kvfree(E);
  23. |
  24. kfree_sensitive(E);
  25. |
  26. kvfree_sensitive(E, ...);
  27. |
  28. vfree(E);
  29. |
  30. debugfs_remove(E);
  31. |
  32. debugfs_remove_recursive(E);
  33. |
  34. usb_free_urb(E);
  35. |
  36. kmem_cache_destroy(E);
  37. |
  38. mempool_destroy(E);
  39. |
  40. dma_pool_destroy(E);
  41. )
  42. @r depends on context || report || org @
  43. expression E;
  44. position p;
  45. @@
  46. * if (E != NULL)
  47. * \(kfree@p\|kvfree@p\|kfree_sensitive@p\|kvfree_sensitive@p\|vfree@p\|
  48. * debugfs_remove@p\|debugfs_remove_recursive@p\|
  49. * usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\|
  50. * dma_pool_destroy@p\)(E, ...);
  51. @script:python depends on org@
  52. p << r.p;
  53. @@
  54. cocci.print_main("NULL check before that freeing function is not needed", p)
  55. @script:python depends on report@
  56. p << r.p;
  57. @@
  58. msg = "WARNING: NULL check before some freeing functions is not needed."
  59. coccilib.report.print_report(p[0], msg)