1e8fa600eSJulia Lawall/// PTR_ERR should access the value just tested by IS_ERR 202da7b42SJulia Lawall//# There can be false positives in the patch case, where it is the call to 3e8fa600eSJulia Lawall//# IS_ERR that is wrong. 4e8fa600eSJulia Lawall/// 5e8fa600eSJulia Lawall// Confidence: High 602da7b42SJulia Lawall// Copyright: (C) 2012, 2015 Julia Lawall, INRIA. GPLv2. 702da7b42SJulia Lawall// Copyright: (C) 2012, 2015 Gilles Muller, INRIA. GPLv2. 8e8fa600eSJulia Lawall// URL: http://coccinelle.lip6.fr/ 993f14468SNicolas Palix// Options: --no-includes --include-headers 10e8fa600eSJulia Lawall 11e8fa600eSJulia Lawallvirtual patch 12e8fa600eSJulia Lawallvirtual context 13e8fa600eSJulia Lawallvirtual org 14e8fa600eSJulia Lawallvirtual report 15e8fa600eSJulia Lawall 1602da7b42SJulia Lawall@ok1 exists@ 1702da7b42SJulia Lawallexpression x,e; 1802da7b42SJulia Lawallposition p; 19e8fa600eSJulia Lawall@@ 20e8fa600eSJulia Lawall 2102da7b42SJulia Lawallif (IS_ERR(x=e) || ...) { 2202da7b42SJulia Lawall <... 2302da7b42SJulia Lawall PTR_ERR@p(x) 2402da7b42SJulia Lawall ...> 2502da7b42SJulia Lawall} 2602da7b42SJulia Lawall 2702da7b42SJulia Lawall@ok2 exists@ 2802da7b42SJulia Lawallexpression x,e1,e2; 2902da7b42SJulia Lawallposition p; 3002da7b42SJulia Lawall@@ 3102da7b42SJulia Lawall 3202da7b42SJulia Lawallif (IS_ERR(x) || ...) { 3302da7b42SJulia Lawall <... 34e8fa600eSJulia Lawall( 3502da7b42SJulia Lawall PTR_ERR@p(\(e1 ? e2 : x\|e1 ? x : e2\)) 36e8fa600eSJulia Lawall| 3702da7b42SJulia Lawall PTR_ERR@p(x) 38e8fa600eSJulia Lawall) 3902da7b42SJulia Lawall ...> 4002da7b42SJulia Lawall} 41e8fa600eSJulia Lawall 4202da7b42SJulia Lawall@r1 depends on patch && !context && !org && !report exists@ 4302da7b42SJulia Lawallexpression x,y; 4402da7b42SJulia Lawallposition p != {ok1.p,ok2.p}; 45e8fa600eSJulia Lawall@@ 46e8fa600eSJulia Lawall 4702da7b42SJulia Lawallif (IS_ERR(x) || ...) { 4802da7b42SJulia Lawall ... when any 4902da7b42SJulia Lawall when != IS_ERR(...) 50e8fa600eSJulia Lawall( 5102da7b42SJulia Lawall PTR_ERR(x) 52e8fa600eSJulia Lawall| 5302da7b42SJulia Lawall PTR_ERR@p( 5402da7b42SJulia Lawall- y 5502da7b42SJulia Lawall+ x 56e8fa600eSJulia Lawall ) 5702da7b42SJulia Lawall) 5802da7b42SJulia Lawall ... when any 5902da7b42SJulia Lawall} 60e8fa600eSJulia Lawall 6102da7b42SJulia Lawall// ---------------------------------------------------------------------------- 6202da7b42SJulia Lawall 6302da7b42SJulia Lawall@r1_context depends on !patch && (context || org || report) exists@ 6402da7b42SJulia Lawallposition p != {ok1.p,ok2.p}; 6502da7b42SJulia Lawallexpression x, y; 6602da7b42SJulia Lawallposition j0, j1; 67e8fa600eSJulia Lawall@@ 68e8fa600eSJulia Lawall 6902da7b42SJulia Lawallif (IS_ERR@j0(x) || ...) { 7002da7b42SJulia Lawall ... when any 7102da7b42SJulia Lawall when != IS_ERR(...) 7202da7b42SJulia Lawall( 7302da7b42SJulia Lawall PTR_ERR(x) 7402da7b42SJulia Lawall| 7502da7b42SJulia Lawall PTR_ERR@j1@p( 7602da7b42SJulia Lawall y 7702da7b42SJulia Lawall ) 7802da7b42SJulia Lawall) 7902da7b42SJulia Lawall ... when any 8002da7b42SJulia Lawall} 81e8fa600eSJulia Lawall 8202da7b42SJulia Lawall@r1_disj depends on !patch && (context || org || report) exists@ 8302da7b42SJulia Lawallposition p != {ok1.p,ok2.p}; 8402da7b42SJulia Lawallexpression x, y; 8502da7b42SJulia Lawallposition r1_context.j0, r1_context.j1; 86e8fa600eSJulia Lawall@@ 87e8fa600eSJulia Lawall 8802da7b42SJulia Lawall* if (IS_ERR@j0(x) || ...) { 8902da7b42SJulia Lawall ... when any 9002da7b42SJulia Lawall when != IS_ERR(...) 9102da7b42SJulia Lawall* PTR_ERR@j1@p( 9202da7b42SJulia Lawall y 9302da7b42SJulia Lawall ) 9402da7b42SJulia Lawall ... when any 9502da7b42SJulia Lawall} 9602da7b42SJulia Lawall 9702da7b42SJulia Lawall// ---------------------------------------------------------------------------- 9802da7b42SJulia Lawall 9902da7b42SJulia Lawall@script:python r1_org depends on org@ 10002da7b42SJulia Lawallj0 << r1_context.j0; 10102da7b42SJulia Lawallj1 << r1_context.j1; 10202da7b42SJulia Lawall@@ 10302da7b42SJulia Lawall 10402da7b42SJulia Lawallmsg = "inconsistent IS_ERR and PTR_ERR" 10502da7b42SJulia Lawallcoccilib.org.print_todo(j0[0], msg) 10602da7b42SJulia Lawallcoccilib.org.print_link(j1[0], "") 10702da7b42SJulia Lawall 10802da7b42SJulia Lawall// ---------------------------------------------------------------------------- 10902da7b42SJulia Lawall 11002da7b42SJulia Lawall@script:python r1_report depends on report@ 11102da7b42SJulia Lawallj0 << r1_context.j0; 11202da7b42SJulia Lawallj1 << r1_context.j1; 11302da7b42SJulia Lawall@@ 11402da7b42SJulia Lawall 11502da7b42SJulia Lawallmsg = "inconsistent IS_ERR and PTR_ERR on line %s." % (j1[0].line) 11602da7b42SJulia Lawallcoccilib.report.print_report(j0[0], msg) 11702da7b42SJulia Lawall 118