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