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