162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/// NULL check before some freeing functions is not needed. 362306a36Sopenharmony_ci/// 462306a36Sopenharmony_ci/// Based on checkpatch warning 562306a36Sopenharmony_ci/// "kfree(NULL) is safe this check is probably not required" 662306a36Sopenharmony_ci/// and kfreeaddr.cocci by Julia Lawall. 762306a36Sopenharmony_ci/// 862306a36Sopenharmony_ci// Copyright: (C) 2014 Fabian Frederick. 962306a36Sopenharmony_ci// Comments: - 1062306a36Sopenharmony_ci// Options: --no-includes --include-headers 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_civirtual patch 1362306a36Sopenharmony_civirtual org 1462306a36Sopenharmony_civirtual report 1562306a36Sopenharmony_civirtual context 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci@r2 depends on patch@ 1862306a36Sopenharmony_ciexpression E; 1962306a36Sopenharmony_ci@@ 2062306a36Sopenharmony_ci- if (E != NULL) 2162306a36Sopenharmony_ci( 2262306a36Sopenharmony_ci kfree(E); 2362306a36Sopenharmony_ci| 2462306a36Sopenharmony_ci kvfree(E); 2562306a36Sopenharmony_ci| 2662306a36Sopenharmony_ci kfree_sensitive(E); 2762306a36Sopenharmony_ci| 2862306a36Sopenharmony_ci kvfree_sensitive(E, ...); 2962306a36Sopenharmony_ci| 3062306a36Sopenharmony_ci vfree(E); 3162306a36Sopenharmony_ci| 3262306a36Sopenharmony_ci debugfs_remove(E); 3362306a36Sopenharmony_ci| 3462306a36Sopenharmony_ci debugfs_remove_recursive(E); 3562306a36Sopenharmony_ci| 3662306a36Sopenharmony_ci usb_free_urb(E); 3762306a36Sopenharmony_ci| 3862306a36Sopenharmony_ci kmem_cache_destroy(E); 3962306a36Sopenharmony_ci| 4062306a36Sopenharmony_ci mempool_destroy(E); 4162306a36Sopenharmony_ci| 4262306a36Sopenharmony_ci dma_pool_destroy(E); 4362306a36Sopenharmony_ci) 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci@r depends on context || report || org @ 4662306a36Sopenharmony_ciexpression E; 4762306a36Sopenharmony_ciposition p; 4862306a36Sopenharmony_ci@@ 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci* if (E != NULL) 5162306a36Sopenharmony_ci* \(kfree@p\|kvfree@p\|kfree_sensitive@p\|kvfree_sensitive@p\|vfree@p\| 5262306a36Sopenharmony_ci* debugfs_remove@p\|debugfs_remove_recursive@p\| 5362306a36Sopenharmony_ci* usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\| 5462306a36Sopenharmony_ci* dma_pool_destroy@p\)(E, ...); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci@script:python depends on org@ 5762306a36Sopenharmony_cip << r.p; 5862306a36Sopenharmony_ci@@ 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cicocci.print_main("NULL check before that freeing function is not needed", p) 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci@script:python depends on report@ 6362306a36Sopenharmony_cip << r.p; 6462306a36Sopenharmony_ci@@ 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cimsg = "WARNING: NULL check before some freeing functions is not needed." 6762306a36Sopenharmony_cicoccilib.report.print_report(p[0], msg) 68