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 kzfree(E); 25 | << 26 kfree_sensitive(E); << 27 | << 28 kvfree_sensitive(E, ...); << 29 | << 30 vfree(E); << 31 | 25 | 32 debugfs_remove(E); 26 debugfs_remove(E); 33 | 27 | 34 debugfs_remove_recursive(E); 28 debugfs_remove_recursive(E); 35 | 29 | 36 usb_free_urb(E); 30 usb_free_urb(E); 37 | 31 | 38 kmem_cache_destroy(E); 32 kmem_cache_destroy(E); 39 | 33 | 40 mempool_destroy(E); 34 mempool_destroy(E); 41 | 35 | 42 dma_pool_destroy(E); 36 dma_pool_destroy(E); 43 ) 37 ) 44 38 45 @r depends on context || report || org @ 39 @r depends on context || report || org @ 46 expression E; 40 expression E; 47 position p; 41 position p; 48 @@ 42 @@ 49 43 50 * if (E != NULL) 44 * if (E != NULL) 51 * \(kfree@p\|kvfree@p\|kfree_sensitive@p !! 45 * \(kfree@p\|kzfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\| 52 * debugfs_remove@p\|debugfs_remove_rec << 53 * usb_free_urb@p\|kmem_cache_destroy@p 46 * usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\| 54 * dma_pool_destroy@p\)(E, ...); !! 47 * dma_pool_destroy@p\)(E); 55 48 56 @script:python depends on org@ 49 @script:python depends on org@ 57 p << r.p; 50 p << r.p; 58 @@ 51 @@ 59 52 60 cocci.print_main("NULL check before that freei 53 cocci.print_main("NULL check before that freeing function is not needed", p) 61 54 62 @script:python depends on report@ 55 @script:python depends on report@ 63 p << r.p; 56 p << r.p; 64 @@ 57 @@ 65 58 66 msg = "WARNING: NULL check before some freeing 59 msg = "WARNING: NULL check before some freeing functions is not needed." 67 coccilib.report.print_report(p[0], msg) 60 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.