1 // SPDX-License-Identifier: GPL-2.0 2 /// Find missing put_device for every of_find_device_by_node. 3 /// 4 // Confidence: Moderate 5 // Copyright: (C) 2018-2019 Wen Yang, ZTE. 6 // Comments: 7 // Options: --no-includes --include-headers 8 9 virtual report 10 virtual org 11 12 @search exists@ 13 local idexpression id; 14 expression x,e,e1; 15 position p1,p2; 16 type T,T1,T2,T3; 17 @@ 18 19 id = of_find_device_by_node@p1(x) 20 ... when != e = id 21 if (id == NULL || ...) { ... return ...; } 22 ... when != put_device(&id->dev) 23 when != platform_device_put(id) 24 when != if (id) { ... put_device(&id->dev) ... } 25 when != e1 = (T)id 26 when != e1 = (T)(&id->dev) 27 when != e1 = get_device(&id->dev) 28 when != e1 = (T1)platform_get_drvdata(id) 29 ( 30 return 31 ( id 32 | (T2)dev_get_drvdata(&id->dev) 33 | (T3)platform_get_drvdata(id) 34 | &id->dev 35 ); 36 | return@p2 ...; 37 ) 38 39 @script:python depends on report@ 40 p1 << search.p1; 41 p2 << search.p2; 42 @@ 43 44 coccilib.report.print_report(p2[0], 45 "ERROR: missing put_device; call of_find_device_by_node on line " 46 + p1[0].line 47 + ", but without a corresponding object release within this function.") 48 49 @script:python depends on org@ 50 p1 << search.p1; 51 p2 << search.p2; 52 @@ 53 54 cocci.print_main("of_find_device_by_node", p1) 55 cocci.print_secs("needed put_device", p2)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.