Loading...
1// SPDX-License-Identifier: GPL-2.0-only
2///
3/// Use zeroing allocator rather than allocator followed by memset with 0
4///
5/// This considers some simple cases that are common and easy to validate
6/// Note in particular that there are no ...s in the rule, so all of the
7/// matched code has to be contiguous
8///
9// Confidence: High
10// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.
11// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.
12// Copyright: (C) 2017 Himanshu Jha
13// URL: https://coccinelle.gitlabpages.inria.fr/website
14// Options: --no-includes --include-headers
15//
16// Keywords: kmalloc, kzalloc
17// Version min: < 2.6.12 kmalloc
18// Version min: 2.6.14 kzalloc
19//
20
21virtual context
22virtual patch
23virtual org
24virtual report
25
26//----------------------------------------------------------
27// For context mode
28//----------------------------------------------------------
29
30@depends on context@
31type T, T2;
32expression x;
33expression E1;
34statement S;
35@@
36
37* x = (T)\(kmalloc(E1, ...)\|vmalloc(E1)\|dma_alloc_coherent(...,E1,...)\|
38 kmalloc_node(E1, ...)\|kmem_cache_alloc(...)\|kmem_alloc(E1, ...)\|
39 devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|kvmalloc_node(E1,...)\);
40 if ((x==NULL) || ...) S
41* memset((T2)x,0,E1);
42
43//----------------------------------------------------------
44// For patch mode
45//----------------------------------------------------------
46
47@depends on patch@
48type T, T2;
49expression x;
50expression E1,E2,E3,E4;
51statement S;
52@@
53
54(
55- x = kmalloc(E1,E2);
56+ x = kzalloc(E1,E2);
57|
58- x = (T *)kmalloc(E1,E2);
59+ x = kzalloc(E1,E2);
60|
61- x = (T)kmalloc(E1,E2);
62+ x = (T)kzalloc(E1,E2);
63|
64- x = vmalloc(E1);
65+ x = vzalloc(E1);
66|
67- x = (T *)vmalloc(E1);
68+ x = vzalloc(E1);
69|
70- x = (T)vmalloc(E1);
71+ x = (T)vzalloc(E1);
72|
73- x = kmalloc_node(E1,E2,E3);
74+ x = kzalloc_node(E1,E2,E3);
75|
76- x = (T *)kmalloc_node(E1,E2,E3);
77+ x = kzalloc_node(E1,E2,E3);
78|
79- x = (T)kmalloc_node(E1,E2,E3);
80+ x = (T)kzalloc_node(E1,E2,E3);
81|
82- x = kmem_cache_alloc(E3,E4);
83+ x = kmem_cache_zalloc(E3,E4);
84|
85- x = (T *)kmem_cache_alloc(E3,E4);
86+ x = kmem_cache_zalloc(E3,E4);
87|
88- x = (T)kmem_cache_alloc(E3,E4);
89+ x = (T)kmem_cache_zalloc(E3,E4);
90|
91- x = kmem_alloc(E1,E2);
92+ x = kmem_zalloc(E1,E2);
93|
94- x = (T *)kmem_alloc(E1,E2);
95+ x = kmem_zalloc(E1,E2);
96|
97- x = (T)kmem_alloc(E1,E2);
98+ x = (T)kmem_zalloc(E1,E2);
99|
100- x = devm_kmalloc(E2,E1,E3);
101+ x = devm_kzalloc(E2,E1,E3);
102|
103- x = (T *)devm_kmalloc(E2,E1,E3);
104+ x = devm_kzalloc(E2,E1,E3);
105|
106- x = (T)devm_kmalloc(E2,E1,E3);
107+ x = (T)devm_kzalloc(E2,E1,E3);
108|
109- x = kvmalloc(E1,E2);
110+ x = kvzalloc(E1,E2);
111|
112- x = (T *)kvmalloc(E1,E2);
113+ x = kvzalloc(E1,E2);
114|
115- x = (T)kvmalloc(E1,E2);
116+ x = (T)kvzalloc(E1,E2);
117|
118- x = kvmalloc_node(E1,E2,E3);
119+ x = kvzalloc_node(E1,E2,E3);
120|
121- x = (T *)kvmalloc_node(E1,E2,E3);
122+ x = kvzalloc_node(E1,E2,E3);
123|
124- x = (T)kvmalloc_node(E1,E2,E3);
125+ x = (T)kvzalloc_node(E1,E2,E3);
126)
127 if ((x==NULL) || ...) S
128- memset((T2)x,0,E1);
129
130@depends on patch@
131type T, T2;
132expression x;
133expression E1,E2,E3,E4;
134statement S;
135@@
136 x = (T)dma_alloc_coherent(E1, E2, E3, E4);
137 if ((x==NULL) || ...) S
138- memset((T2)x, 0, E2);
139
140//----------------------------------------------------------
141// For org mode
142//----------------------------------------------------------
143
144@r depends on org || report@
145type T, T2;
146expression x;
147expression E1,E2;
148statement S;
149position p;
150@@
151
152 x = (T)kmalloc@p(E1,E2);
153 if ((x==NULL) || ...) S
154 memset((T2)x,0,E1);
155
156@script:python depends on org@
157p << r.p;
158x << r.x;
159@@
160
161msg="%s" % (x)
162msg_safe=msg.replace("[","@(").replace("]",")")
163coccilib.org.print_todo(p[0], msg_safe)
164
165@script:python depends on report@
166p << r.p;
167x << r.x;
168@@
169
170msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
171coccilib.report.print_report(p[0], msg)
172
173//-----------------------------------------------------------------
174@r1 depends on org || report@
175type T, T2;
176expression x;
177expression E1;
178statement S;
179position p;
180@@
181
182 x = (T)vmalloc@p(E1);
183 if ((x==NULL) || ...) S
184 memset((T2)x,0,E1);
185
186@script:python depends on org@
187p << r1.p;
188x << r1.x;
189@@
190
191msg="%s" % (x)
192msg_safe=msg.replace("[","@(").replace("]",")")
193coccilib.org.print_todo(p[0], msg_safe)
194
195@script:python depends on report@
196p << r1.p;
197x << r1.x;
198@@
199
200msg="WARNING: vzalloc should be used for %s, instead of vmalloc/memset" % (x)
201coccilib.report.print_report(p[0], msg)
202
203//-----------------------------------------------------------------
204@r2 depends on org || report@
205type T, T2;
206expression x;
207expression E1,E2,E3,E4;
208statement S;
209position p;
210@@
211
212 x = (T)dma_alloc_coherent@p(E1,E2,E3,E4);
213 if ((x==NULL) || ...) S
214 memset((T2)x,0,E2);
215
216@script:python depends on org@
217p << r2.p;
218x << r2.x;
219@@
220
221msg="%s" % (x)
222msg_safe=msg.replace("[","@(").replace("]",")")
223coccilib.org.print_todo(p[0], msg_safe)
224
225@script:python depends on report@
226p << r2.p;
227x << r2.x;
228@@
229
230msg="WARNING: dma_alloc_coherent used in %s already zeroes out memory, so memset is not needed" % (x)
231coccilib.report.print_report(p[0], msg)
232
233//-----------------------------------------------------------------
234@r3 depends on org || report@
235type T, T2;
236expression x;
237expression E1,E2,E3;
238statement S;
239position p;
240@@
241
242 x = (T)kmalloc_node@p(E1,E2,E3);
243 if ((x==NULL) || ...) S
244 memset((T2)x,0,E1);
245
246@script:python depends on org@
247p << r3.p;
248x << r3.x;
249@@
250
251msg="%s" % (x)
252msg_safe=msg.replace("[","@(").replace("]",")")
253coccilib.org.print_todo(p[0], msg_safe)
254
255@script:python depends on report@
256p << r3.p;
257x << r3.x;
258@@
259
260msg="WARNING: kzalloc_node should be used for %s, instead of kmalloc_node/memset" % (x)
261coccilib.report.print_report(p[0], msg)
262
263//-----------------------------------------------------------------
264@r4 depends on org || report@
265type T, T2;
266expression x;
267expression E1,E2,E3;
268statement S;
269position p;
270@@
271
272 x = (T)kmem_cache_alloc@p(E2,E3);
273 if ((x==NULL) || ...) S
274 memset((T2)x,0,E1);
275
276@script:python depends on org@
277p << r4.p;
278x << r4.x;
279@@
280
281msg="%s" % (x)
282msg_safe=msg.replace("[","@(").replace("]",")")
283coccilib.org.print_todo(p[0], msg_safe)
284
285@script:python depends on report@
286p << r4.p;
287x << r4.x;
288@@
289
290msg="WARNING: kmem_cache_zalloc should be used for %s, instead of kmem_cache_alloc/memset" % (x)
291coccilib.report.print_report(p[0], msg)
292
293//-----------------------------------------------------------------
294@r5 depends on org || report@
295type T, T2;
296expression x;
297expression E1,E2;
298statement S;
299position p;
300@@
301
302 x = (T)kmem_alloc@p(E1,E2);
303 if ((x==NULL) || ...) S
304 memset((T2)x,0,E1);
305
306@script:python depends on org@
307p << r5.p;
308x << r5.x;
309@@
310
311msg="%s" % (x)
312msg_safe=msg.replace("[","@(").replace("]",")")
313coccilib.org.print_todo(p[0], msg_safe)
314
315@script:python depends on report@
316p << r5.p;
317x << r5.x;
318@@
319
320msg="WARNING: kmem_zalloc should be used for %s, instead of kmem_alloc/memset" % (x)
321coccilib.report.print_report(p[0], msg)
322
323//-----------------------------------------------------------------
324@r6 depends on org || report@
325type T, T2;
326expression x;
327expression E1,E2,E3;
328statement S;
329position p;
330@@
331
332 x = (T)devm_kmalloc@p(E2,E1,E3);
333 if ((x==NULL) || ...) S
334 memset((T2)x,0,E1);
335
336@script:python depends on org@
337p << r6.p;
338x << r6.x;
339@@
340
341msg="%s" % (x)
342msg_safe=msg.replace("[","@(").replace("]",")")
343coccilib.org.print_todo(p[0], msg_safe)
344
345@script:python depends on report@
346p << r6.p;
347x << r6.x;
348@@
349
350msg="WARNING: devm_kzalloc should be used for %s, instead of devm_kmalloc/memset" % (x)
351coccilib.report.print_report(p[0], msg)
352
353//-----------------------------------------------------------------
354@r7 depends on org || report@
355type T, T2;
356expression x;
357expression E1,E2;
358statement S;
359position p;
360@@
361
362 x = (T)kvmalloc@p(E1,E2);
363 if ((x==NULL) || ...) S
364 memset((T2)x,0,E1);
365
366@script:python depends on org@
367p << r7.p;
368x << r7.x;
369@@
370
371msg="%s" % (x)
372msg_safe=msg.replace("[","@(").replace("]",")")
373coccilib.org.print_todo(p[0], msg_safe)
374
375@script:python depends on report@
376p << r7.p;
377x << r7.x;
378@@
379
380msg="WARNING: kvzalloc should be used for %s, instead of kvmalloc/memset" % (x)
381coccilib.report.print_report(p[0], msg)
382
383//-----------------------------------------------------------------
384@r9 depends on org || report@
385type T, T2;
386expression x;
387expression E1,E2,E3;
388statement S;
389position p;
390@@
391
392 x = (T)kvmalloc_node@p(E1,E2,E3);
393 if ((x==NULL) || ...) S
394 memset((T2)x,0,E1);
395
396@script:python depends on org@
397p << r9.p;
398x << r9.x;
399@@
400
401msg="%s" % (x)
402msg_safe=msg.replace("[","@(").replace("]",")")
403coccilib.org.print_todo(p[0], msg_safe)
404
405@script:python depends on report@
406p << r9.p;
407x << r9.x;
408@@
409
410msg="WARNING: kvzalloc_node should be used for %s, instead of kvmalloc_node/memset" % (x)
411coccilib.report.print_report(p[0], msg)
1///
2/// Use zeroing allocator rather than allocator followed by memset with 0
3///
4/// This considers some simple cases that are common and easy to validate
5/// Note in particular that there are no ...s in the rule, so all of the
6/// matched code has to be contiguous
7///
8// Confidence: High
9// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2.
10// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2.
11// Copyright: (C) 2017 Himanshu Jha GPLv2.
12// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
13// Options: --no-includes --include-headers
14//
15// Keywords: kmalloc, kzalloc
16// Version min: < 2.6.12 kmalloc
17// Version min: 2.6.14 kzalloc
18//
19
20virtual context
21virtual patch
22virtual org
23virtual report
24
25//----------------------------------------------------------
26// For context mode
27//----------------------------------------------------------
28
29@depends on context@
30type T, T2;
31expression x;
32expression E1;
33statement S;
34@@
35
36* x = (T)\(kmalloc(E1, ...)\|vmalloc(E1)\|dma_alloc_coherent(...,E1,...)\|
37 kmalloc_node(E1, ...)\|kmem_cache_alloc(...)\|kmem_alloc(E1, ...)\|
38 devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|pci_alloc_consistent(...,E1,...)\|
39 kvmalloc_node(E1,...)\);
40 if ((x==NULL) || ...) S
41* memset((T2)x,0,E1);
42
43//----------------------------------------------------------
44// For patch mode
45//----------------------------------------------------------
46
47@depends on patch@
48type T, T2;
49expression x;
50expression E1,E2,E3,E4;
51statement S;
52@@
53
54(
55- x = kmalloc(E1,E2);
56+ x = kzalloc(E1,E2);
57|
58- x = (T *)kmalloc(E1,E2);
59+ x = kzalloc(E1,E2);
60|
61- x = (T)kmalloc(E1,E2);
62+ x = (T)kzalloc(E1,E2);
63|
64- x = vmalloc(E1);
65+ x = vzalloc(E1);
66|
67- x = (T *)vmalloc(E1);
68+ x = vzalloc(E1);
69|
70- x = (T)vmalloc(E1);
71+ x = (T)vzalloc(E1);
72|
73- x = dma_alloc_coherent(E2,E1,E3,E4);
74+ x = dma_zalloc_coherent(E2,E1,E3,E4);
75|
76- x = (T *)dma_alloc_coherent(E2,E1,E3,E4);
77+ x = dma_zalloc_coherent(E2,E1,E3,E4);
78|
79- x = (T)dma_alloc_coherent(E2,E1,E3,E4);
80+ x = (T)dma_zalloc_coherent(E2,E1,E3,E4);
81|
82- x = kmalloc_node(E1,E2,E3);
83+ x = kzalloc_node(E1,E2,E3);
84|
85- x = (T *)kmalloc_node(E1,E2,E3);
86+ x = kzalloc_node(E1,E2,E3);
87|
88- x = (T)kmalloc_node(E1,E2,E3);
89+ x = (T)kzalloc_node(E1,E2,E3);
90|
91- x = kmem_cache_alloc(E3,E4);
92+ x = kmem_cache_zalloc(E3,E4);
93|
94- x = (T *)kmem_cache_alloc(E3,E4);
95+ x = kmem_cache_zalloc(E3,E4);
96|
97- x = (T)kmem_cache_alloc(E3,E4);
98+ x = (T)kmem_cache_zalloc(E3,E4);
99|
100- x = kmem_alloc(E1,E2);
101+ x = kmem_zalloc(E1,E2);
102|
103- x = (T *)kmem_alloc(E1,E2);
104+ x = kmem_zalloc(E1,E2);
105|
106- x = (T)kmem_alloc(E1,E2);
107+ x = (T)kmem_zalloc(E1,E2);
108|
109- x = devm_kmalloc(E2,E1,E3);
110+ x = devm_kzalloc(E2,E1,E3);
111|
112- x = (T *)devm_kmalloc(E2,E1,E3);
113+ x = devm_kzalloc(E2,E1,E3);
114|
115- x = (T)devm_kmalloc(E2,E1,E3);
116+ x = (T)devm_kzalloc(E2,E1,E3);
117|
118- x = kvmalloc(E1,E2);
119+ x = kvzalloc(E1,E2);
120|
121- x = (T *)kvmalloc(E1,E2);
122+ x = kvzalloc(E1,E2);
123|
124- x = (T)kvmalloc(E1,E2);
125+ x = (T)kvzalloc(E1,E2);
126|
127- x = pci_alloc_consistent(E2,E1,E3);
128+ x = pci_zalloc_consistent(E2,E1,E3);
129|
130- x = (T *)pci_alloc_consistent(E2,E1,E3);
131+ x = pci_zalloc_consistent(E2,E1,E3);
132|
133- x = (T)pci_alloc_consistent(E2,E1,E3);
134+ x = (T)pci_zalloc_consistent(E2,E1,E3);
135|
136- x = kvmalloc_node(E1,E2,E3);
137+ x = kvzalloc_node(E1,E2,E3);
138|
139- x = (T *)kvmalloc_node(E1,E2,E3);
140+ x = kvzalloc_node(E1,E2,E3);
141|
142- x = (T)kvmalloc_node(E1,E2,E3);
143+ x = (T)kvzalloc_node(E1,E2,E3);
144)
145 if ((x==NULL) || ...) S
146- memset((T2)x,0,E1);
147
148//----------------------------------------------------------
149// For org mode
150//----------------------------------------------------------
151
152@r depends on org || report@
153type T, T2;
154expression x;
155expression E1,E2;
156statement S;
157position p;
158@@
159
160 x = (T)kmalloc@p(E1,E2);
161 if ((x==NULL) || ...) S
162 memset((T2)x,0,E1);
163
164@script:python depends on org@
165p << r.p;
166x << r.x;
167@@
168
169msg="%s" % (x)
170msg_safe=msg.replace("[","@(").replace("]",")")
171coccilib.org.print_todo(p[0], msg_safe)
172
173@script:python depends on report@
174p << r.p;
175x << r.x;
176@@
177
178msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
179coccilib.report.print_report(p[0], msg)
180
181//-----------------------------------------------------------------
182@r1 depends on org || report@
183type T, T2;
184expression x;
185expression E1;
186statement S;
187position p;
188@@
189
190 x = (T)vmalloc@p(E1);
191 if ((x==NULL) || ...) S
192 memset((T2)x,0,E1);
193
194@script:python depends on org@
195p << r1.p;
196x << r1.x;
197@@
198
199msg="%s" % (x)
200msg_safe=msg.replace("[","@(").replace("]",")")
201coccilib.org.print_todo(p[0], msg_safe)
202
203@script:python depends on report@
204p << r1.p;
205x << r1.x;
206@@
207
208msg="WARNING: vzalloc should be used for %s, instead of vmalloc/memset" % (x)
209coccilib.report.print_report(p[0], msg)
210
211//-----------------------------------------------------------------
212@r2 depends on org || report@
213type T, T2;
214expression x;
215expression E1,E2,E3,E4;
216statement S;
217position p;
218@@
219
220 x = (T)dma_alloc_coherent@p(E2,E1,E3,E4);
221 if ((x==NULL) || ...) S
222 memset((T2)x,0,E1);
223
224@script:python depends on org@
225p << r2.p;
226x << r2.x;
227@@
228
229msg="%s" % (x)
230msg_safe=msg.replace("[","@(").replace("]",")")
231coccilib.org.print_todo(p[0], msg_safe)
232
233@script:python depends on report@
234p << r2.p;
235x << r2.x;
236@@
237
238msg="WARNING: dma_zalloc_coherent should be used for %s, instead of dma_alloc_coherent/memset" % (x)
239coccilib.report.print_report(p[0], msg)
240
241//-----------------------------------------------------------------
242@r3 depends on org || report@
243type T, T2;
244expression x;
245expression E1,E2,E3;
246statement S;
247position p;
248@@
249
250 x = (T)kmalloc_node@p(E1,E2,E3);
251 if ((x==NULL) || ...) S
252 memset((T2)x,0,E1);
253
254@script:python depends on org@
255p << r3.p;
256x << r3.x;
257@@
258
259msg="%s" % (x)
260msg_safe=msg.replace("[","@(").replace("]",")")
261coccilib.org.print_todo(p[0], msg_safe)
262
263@script:python depends on report@
264p << r3.p;
265x << r3.x;
266@@
267
268msg="WARNING: kzalloc_node should be used for %s, instead of kmalloc_node/memset" % (x)
269coccilib.report.print_report(p[0], msg)
270
271//-----------------------------------------------------------------
272@r4 depends on org || report@
273type T, T2;
274expression x;
275expression E1,E2,E3;
276statement S;
277position p;
278@@
279
280 x = (T)kmem_cache_alloc@p(E2,E3);
281 if ((x==NULL) || ...) S
282 memset((T2)x,0,E1);
283
284@script:python depends on org@
285p << r4.p;
286x << r4.x;
287@@
288
289msg="%s" % (x)
290msg_safe=msg.replace("[","@(").replace("]",")")
291coccilib.org.print_todo(p[0], msg_safe)
292
293@script:python depends on report@
294p << r4.p;
295x << r4.x;
296@@
297
298msg="WARNING: kmem_cache_zalloc should be used for %s, instead of kmem_cache_alloc/memset" % (x)
299coccilib.report.print_report(p[0], msg)
300
301//-----------------------------------------------------------------
302@r5 depends on org || report@
303type T, T2;
304expression x;
305expression E1,E2;
306statement S;
307position p;
308@@
309
310 x = (T)kmem_alloc@p(E1,E2);
311 if ((x==NULL) || ...) S
312 memset((T2)x,0,E1);
313
314@script:python depends on org@
315p << r5.p;
316x << r5.x;
317@@
318
319msg="%s" % (x)
320msg_safe=msg.replace("[","@(").replace("]",")")
321coccilib.org.print_todo(p[0], msg_safe)
322
323@script:python depends on report@
324p << r5.p;
325x << r5.x;
326@@
327
328msg="WARNING: kmem_zalloc should be used for %s, instead of kmem_alloc/memset" % (x)
329coccilib.report.print_report(p[0], msg)
330
331//-----------------------------------------------------------------
332@r6 depends on org || report@
333type T, T2;
334expression x;
335expression E1,E2,E3;
336statement S;
337position p;
338@@
339
340 x = (T)devm_kmalloc@p(E2,E1,E3);
341 if ((x==NULL) || ...) S
342 memset((T2)x,0,E1);
343
344@script:python depends on org@
345p << r6.p;
346x << r6.x;
347@@
348
349msg="%s" % (x)
350msg_safe=msg.replace("[","@(").replace("]",")")
351coccilib.org.print_todo(p[0], msg_safe)
352
353@script:python depends on report@
354p << r6.p;
355x << r6.x;
356@@
357
358msg="WARNING: devm_kzalloc should be used for %s, instead of devm_kmalloc/memset" % (x)
359coccilib.report.print_report(p[0], msg)
360
361//-----------------------------------------------------------------
362@r7 depends on org || report@
363type T, T2;
364expression x;
365expression E1,E2;
366statement S;
367position p;
368@@
369
370 x = (T)kvmalloc@p(E1,E2);
371 if ((x==NULL) || ...) S
372 memset((T2)x,0,E1);
373
374@script:python depends on org@
375p << r7.p;
376x << r7.x;
377@@
378
379msg="%s" % (x)
380msg_safe=msg.replace("[","@(").replace("]",")")
381coccilib.org.print_todo(p[0], msg_safe)
382
383@script:python depends on report@
384p << r7.p;
385x << r7.x;
386@@
387
388msg="WARNING: kvzalloc should be used for %s, instead of kvmalloc/memset" % (x)
389coccilib.report.print_report(p[0], msg)
390
391//-----------------------------------------------------------------
392@r8 depends on org || report@
393type T, T2;
394expression x;
395expression E1,E2,E3;
396statement S;
397position p;
398@@
399
400 x = (T)pci_alloc_consistent@p(E2,E1,E3);
401 if ((x==NULL) || ...) S
402 memset((T2)x,0,E1);
403
404@script:python depends on org@
405p << r8.p;
406x << r8.x;
407@@
408
409msg="%s" % (x)
410msg_safe=msg.replace("[","@(").replace("]",")")
411coccilib.org.print_todo(p[0], msg_safe)
412
413@script:python depends on report@
414p << r8.p;
415x << r8.x;
416@@
417
418msg="WARNING: pci_zalloc_consistent should be used for %s, instead of pci_alloc_consistent/memset" % (x)
419coccilib.report.print_report(p[0], msg)
420//-----------------------------------------------------------------
421@r9 depends on org || report@
422type T, T2;
423expression x;
424expression E1,E2,E3;
425statement S;
426position p;
427@@
428
429 x = (T)kvmalloc_node@p(E1,E2,E3);
430 if ((x==NULL) || ...) S
431 memset((T2)x,0,E1);
432
433@script:python depends on org@
434p << r9.p;
435x << r9.x;
436@@
437
438msg="%s" % (x)
439msg_safe=msg.replace("[","@(").replace("]",")")
440coccilib.org.print_todo(p[0], msg_safe)
441
442@script:python depends on report@
443p << r9.p;
444x << r9.x;
445@@
446
447msg="WARNING: kvzalloc_node should be used for %s, instead of kvmalloc_node/memset" % (x)
448coccilib.report.print_report(p[0], msg)