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