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