17f904d7eSThomas Gleixner// SPDX-License-Identifier: GPL-2.0-only
2791dfeb4SFabian Frederick/// NULL check before some freeing functions is not needed.
3791dfeb4SFabian Frederick///
4791dfeb4SFabian Frederick/// Based on checkpatch warning
5791dfeb4SFabian Frederick/// "kfree(NULL) is safe this check is probably not required"
6791dfeb4SFabian Frederick/// and kfreeaddr.cocci by Julia Lawall.
7791dfeb4SFabian Frederick///
87f904d7eSThomas Gleixner// Copyright: (C) 2014 Fabian Frederick.
945715f33SFabian Frederick// Comments: -
1045715f33SFabian Frederick// Options: --no-includes --include-headers
11791dfeb4SFabian Frederick
12791dfeb4SFabian Frederickvirtual patch
13791dfeb4SFabian Frederickvirtual org
14791dfeb4SFabian Frederickvirtual report
15791dfeb4SFabian Frederickvirtual context
16791dfeb4SFabian Frederick
17791dfeb4SFabian Frederick@r2 depends on patch@
18791dfeb4SFabian Frederickexpression E;
19791dfeb4SFabian Frederick@@
20ca047e71SJulia Lawall- if (E != NULL)
21791dfeb4SFabian Frederick(
22ca047e71SJulia Lawall  kfree(E);
23791dfeb4SFabian Frederick|
245e0c074eSDenis Efremov  kvfree(E);
255e0c074eSDenis Efremov|
26453431a5SWaiman Long  kfree_sensitive(E);
276dd9379eSYann Droneaud|
285e0c074eSDenis Efremov  kvfree_sensitive(E, ...);
295e0c074eSDenis Efremov|
305e0c074eSDenis Efremov  vfree(E);
315e0c074eSDenis Efremov|
32ca047e71SJulia Lawall  debugfs_remove(E);
33791dfeb4SFabian Frederick|
34ca047e71SJulia Lawall  debugfs_remove_recursive(E);
35791dfeb4SFabian Frederick|
36ca047e71SJulia Lawall  usb_free_urb(E);
374743775cSJulia Lawall|
384743775cSJulia Lawall  kmem_cache_destroy(E);
394743775cSJulia Lawall|
404743775cSJulia Lawall  mempool_destroy(E);
414743775cSJulia Lawall|
424743775cSJulia Lawall  dma_pool_destroy(E);
43791dfeb4SFabian Frederick)
44791dfeb4SFabian Frederick
45791dfeb4SFabian Frederick@r depends on context || report || org @
46791dfeb4SFabian Frederickexpression E;
47791dfeb4SFabian Frederickposition p;
48791dfeb4SFabian Frederick@@
49791dfeb4SFabian Frederick
50ca047e71SJulia Lawall* if (E != NULL)
515e0c074eSDenis Efremov*	\(kfree@p\|kvfree@p\|kfree_sensitive@p\|kvfree_sensitive@p\|vfree@p\|
525e0c074eSDenis Efremov*         debugfs_remove@p\|debugfs_remove_recursive@p\|
534743775cSJulia Lawall*         usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\|
545e0c074eSDenis Efremov*         dma_pool_destroy@p\)(E, ...);
55791dfeb4SFabian Frederick
56791dfeb4SFabian Frederick@script:python depends on org@
57791dfeb4SFabian Frederickp << r.p;
58791dfeb4SFabian Frederick@@
59791dfeb4SFabian Frederick
60791dfeb4SFabian Frederickcocci.print_main("NULL check before that freeing function is not needed", p)
61791dfeb4SFabian Frederick
62791dfeb4SFabian Frederick@script:python depends on report@
63791dfeb4SFabian Frederickp << r.p;
64791dfeb4SFabian Frederick@@
65791dfeb4SFabian Frederick
663e47599fSHimanshu Jhamsg = "WARNING: NULL check before some freeing functions is not needed."
67791dfeb4SFabian Frederickcoccilib.report.print_report(p[0], msg)
68