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