1 // SPDX-License-Identifier: GPL-2.0-only 2 /// Find nested lock+irqsave functions that use the same flags variables 3 /// 4 // Confidence: High 5 // Copyright: (C) 2010-2012 Nicolas Palix. 6 // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. 7 // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. 8 // URL: https://coccinelle.gitlabpages.inria.fr/website 9 // Comments: 10 // Options: --no-includes --include-headers 11 12 virtual context 13 virtual org 14 virtual report 15 16 @r exists@ 17 expression lock1,lock2,flags; 18 position p1,p2; 19 @@ 20 21 ( 22 spin_lock_irqsave@p1(lock1,flags) 23 | 24 read_lock_irqsave@p1(lock1,flags) 25 | 26 write_lock_irqsave@p1(lock1,flags) 27 ) 28 ... when != flags 29 ( 30 spin_lock_irqsave(lock1,flags) 31 | 32 read_lock_irqsave(lock1,flags) 33 | 34 write_lock_irqsave(lock1,flags) 35 | 36 spin_lock_irqsave@p2(lock2,flags) 37 | 38 read_lock_irqsave@p2(lock2,flags) 39 | 40 write_lock_irqsave@p2(lock2,flags) 41 ) 42 43 @d exists@ 44 expression f <= r.flags; 45 expression lock1,lock2,flags; 46 position r.p1, r.p2; 47 @@ 48 49 ( 50 *spin_lock_irqsave@p1(lock1,flags) 51 | 52 *read_lock_irqsave@p1(lock1,flags) 53 | 54 *write_lock_irqsave@p1(lock1,flags) 55 ) 56 ... when != f 57 ( 58 *spin_lock_irqsave@p2(lock2,flags) 59 | 60 *read_lock_irqsave@p2(lock2,flags) 61 | 62 *write_lock_irqsave@p2(lock2,flags) 63 ) 64 65 // ---------------------------------------------------------------------- 66 67 @script:python depends on d && org@ 68 p1 << r.p1; 69 p2 << r.p2; 70 @@ 71 72 cocci.print_main("original lock",p1) 73 cocci.print_secs("nested lock+irqsave that reuses flags",p2) 74 75 @script:python depends on d && report@ 76 p1 << r.p1; 77 p2 << r.p2; 78 @@ 79 80 msg="ERROR: nested lock+irqsave that reuses flags from line %s." % (p1[0].line) 81 coccilib.report.print_report(p2[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.