1*53ee8cc1Swenshuai.xi/// 2*53ee8cc1Swenshuai.xi/// Use kzalloc rather than kmalloc followed by memset with 0 3*53ee8cc1Swenshuai.xi/// 4*53ee8cc1Swenshuai.xi/// This considers some simple cases that are common and easy to validate 5*53ee8cc1Swenshuai.xi/// Note in particular that there are no ...s in the rule, so all of the 6*53ee8cc1Swenshuai.xi/// matched code has to be contiguous 7*53ee8cc1Swenshuai.xi/// 8*53ee8cc1Swenshuai.xi// Confidence: High 9*53ee8cc1Swenshuai.xi// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2. 10*53ee8cc1Swenshuai.xi// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2. 11*53ee8cc1Swenshuai.xi// URL: http://coccinelle.lip6.fr/rules/kzalloc.html 12*53ee8cc1Swenshuai.xi// Options: -no_includes -include_headers 13*53ee8cc1Swenshuai.xi// 14*53ee8cc1Swenshuai.xi// Keywords: kmalloc, kzalloc 15*53ee8cc1Swenshuai.xi// Version min: < 2.6.12 kmalloc 16*53ee8cc1Swenshuai.xi// Version min: 2.6.14 kzalloc 17*53ee8cc1Swenshuai.xi// 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xivirtual context 20*53ee8cc1Swenshuai.xivirtual patch 21*53ee8cc1Swenshuai.xivirtual org 22*53ee8cc1Swenshuai.xivirtual report 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi//---------------------------------------------------------- 25*53ee8cc1Swenshuai.xi// For context mode 26*53ee8cc1Swenshuai.xi//---------------------------------------------------------- 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi@depends on context@ 29*53ee8cc1Swenshuai.xitype T, T2; 30*53ee8cc1Swenshuai.xiexpression x; 31*53ee8cc1Swenshuai.xiexpression E1,E2; 32*53ee8cc1Swenshuai.xistatement S; 33*53ee8cc1Swenshuai.xi@@ 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi* x = (T)kmalloc(E1,E2); 36*53ee8cc1Swenshuai.xi if ((x==NULL) || ...) S 37*53ee8cc1Swenshuai.xi* memset((T2)x,0,E1); 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi//---------------------------------------------------------- 40*53ee8cc1Swenshuai.xi// For patch mode 41*53ee8cc1Swenshuai.xi//---------------------------------------------------------- 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi@depends on patch@ 44*53ee8cc1Swenshuai.xitype T, T2; 45*53ee8cc1Swenshuai.xiexpression x; 46*53ee8cc1Swenshuai.xiexpression E1,E2; 47*53ee8cc1Swenshuai.xistatement S; 48*53ee8cc1Swenshuai.xi@@ 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi- x = (T)kmalloc(E1,E2); 51*53ee8cc1Swenshuai.xi+ x = kzalloc(E1,E2); 52*53ee8cc1Swenshuai.xi if ((x==NULL) || ...) S 53*53ee8cc1Swenshuai.xi- memset((T2)x,0,E1); 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi//---------------------------------------------------------- 56*53ee8cc1Swenshuai.xi// For org mode 57*53ee8cc1Swenshuai.xi//---------------------------------------------------------- 58*53ee8cc1Swenshuai.xi 59*53ee8cc1Swenshuai.xi@r depends on org || report@ 60*53ee8cc1Swenshuai.xitype T, T2; 61*53ee8cc1Swenshuai.xiexpression x; 62*53ee8cc1Swenshuai.xiexpression E1,E2; 63*53ee8cc1Swenshuai.xistatement S; 64*53ee8cc1Swenshuai.xiposition p; 65*53ee8cc1Swenshuai.xi@@ 66*53ee8cc1Swenshuai.xi 67*53ee8cc1Swenshuai.xi x = (T)kmalloc@p(E1,E2); 68*53ee8cc1Swenshuai.xi if ((x==NULL) || ...) S 69*53ee8cc1Swenshuai.xi memset((T2)x,0,E1); 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi@script:python depends on org@ 72*53ee8cc1Swenshuai.xip << r.p; 73*53ee8cc1Swenshuai.xix << r.x; 74*53ee8cc1Swenshuai.xi@@ 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.ximsg="%s" % (x) 77*53ee8cc1Swenshuai.ximsg_safe=msg.replace("[","@(").replace("]",")") 78*53ee8cc1Swenshuai.xicoccilib.org.print_todo(p[0], msg_safe) 79*53ee8cc1Swenshuai.xi 80*53ee8cc1Swenshuai.xi@script:python depends on report@ 81*53ee8cc1Swenshuai.xip << r.p; 82*53ee8cc1Swenshuai.xix << r.x; 83*53ee8cc1Swenshuai.xi@@ 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.ximsg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x) 86*53ee8cc1Swenshuai.xicoccilib.report.print_report(p[0], msg) 87