~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/coccinelle/api/kvmalloc.cocci

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/coccinelle/api/kvmalloc.cocci (Version linux-6.12-rc7) and /scripts/coccinelle/api/kvmalloc.cocci (Version linux-2.6.0)


  1 // SPDX-License-Identifier: GPL-2.0-only          
  2 ///                                               
  3 /// Find if/else condition with kmalloc/vmallo    
  4 /// Suggest to use kvmalloc instead. Same for     
  5 ///                                               
  6 // Confidence: High                               
  7 // Copyright: (C) 2020 Denis Efremov ISPRAS       
  8 // Options: --no-includes --include-headers       
  9 //                                                
 10                                                   
 11 virtual patch                                     
 12 virtual report                                    
 13 virtual org                                       
 14 virtual context                                   
 15                                                   
 16 @initialize:python@                               
 17 @@                                                
 18 filter = frozenset(['kvfree'])                    
 19                                                   
 20 def relevant(p):                                  
 21     return not (filter & {el.current_element f    
 22                                                   
 23 @kvmalloc depends on !patch@                      
 24 expression E, E1, size;                           
 25 identifier flags;                                 
 26 binary operator cmp = {<=, <, ==, >, >=};         
 27 identifier x;                                     
 28 type T;                                           
 29 position p;                                       
 30 @@                                                
 31                                                   
 32 (                                                 
 33 * if (size cmp E1 || ...)@p {                     
 34     ...                                           
 35 *    E = \(kmalloc\|kzalloc\|kcalloc\|kmalloc_    
 36 *          kmalloc_array\|kmalloc_array_node\|    
 37 *          (..., size, \(flags\|GFP_KERNEL\|\(    
 38     ...                                           
 39   } else {                                        
 40     ...                                           
 41 *    E = \(vmalloc\|vzalloc\|vmalloc_node\|vza    
 42     ...                                           
 43   }                                               
 44 |                                                 
 45 * E = \(kmalloc\|kzalloc\|kcalloc\|kmalloc_nod    
 46 *       kmalloc_array\|kmalloc_array_node\|kca    
 47 *       (..., size, \(flags\|GFP_KERNEL\|\(GFP    
 48   ... when != E = E1                              
 49       when != size = E1                           
 50       when any                                    
 51 * if (E == NULL)@p {                              
 52     ...                                           
 53 *   E = \(vmalloc\|vzalloc\|vmalloc_node\|vzal    
 54     ...                                           
 55   }                                               
 56 |                                                 
 57 * T x = \(kmalloc\|kzalloc\|kcalloc\|kmalloc_n    
 58 *         kmalloc_array\|kmalloc_array_node\|k    
 59 *         (..., size, \(flags\|GFP_KERNEL\|\(G    
 60   ... when != x = E1                              
 61       when != size = E1                           
 62       when any                                    
 63 * if (x == NULL)@p {                              
 64     ...                                           
 65 *   x = \(vmalloc\|vzalloc\|vmalloc_node\|vzal    
 66     ...                                           
 67   }                                               
 68 )                                                 
 69                                                   
 70 @kvfree depends on !patch@                        
 71 expression E;                                     
 72 position p : script:python() { relevant(p) };     
 73 @@                                                
 74                                                   
 75 * if (is_vmalloc_addr(E))@p {                     
 76     ...                                           
 77 *   vfree(E)                                      
 78     ...                                           
 79   } else {                                        
 80     ... when != krealloc(E, ...)                  
 81         when any                                  
 82 *   \(kfree\|kfree_sensitive\)(E)                 
 83     ...                                           
 84   }                                               
 85                                                   
 86 @depends on patch@                                
 87 expression E, E1, size, node;                     
 88 binary operator cmp = {<=, <, ==, >, >=};         
 89 identifier flags, x;                              
 90 type T;                                           
 91 @@                                                
 92                                                   
 93 (                                                 
 94 - if (size cmp E1)                                
 95 -    E = kmalloc(size, flags);                    
 96 - else                                            
 97 -    E = vmalloc(size);                           
 98 + E = kvmalloc(size, flags);                      
 99 |                                                 
100 - if (size cmp E1)                                
101 -    E = kmalloc(size, \(GFP_KERNEL\|GFP_KERNE    
102 - else                                            
103 -    E = vmalloc(size);                           
104 + E = kvmalloc(size, GFP_KERNEL);                 
105 |                                                 
106 - E = kmalloc(size, flags | __GFP_NOWARN);        
107 - if (E == NULL)                                  
108 -   E = vmalloc(size);                            
109 + E = kvmalloc(size, flags);                      
110 |                                                 
111 - E = kmalloc(size, \(GFP_KERNEL\|GFP_KERNEL|_    
112 - if (E == NULL)                                  
113 -   E = vmalloc(size);                            
114 + E = kvmalloc(size, GFP_KERNEL);                 
115 |                                                 
116 - T x = kmalloc(size, flags | __GFP_NOWARN);      
117 - if (x == NULL)                                  
118 -   x = vmalloc(size);                            
119 + T x = kvmalloc(size, flags);                    
120 |                                                 
121 - T x = kmalloc(size, \(GFP_KERNEL\|GFP_KERNEL    
122 - if (x == NULL)                                  
123 -   x = vmalloc(size);                            
124 + T x = kvmalloc(size, GFP_KERNEL);               
125 |                                                 
126 - if (size cmp E1)                                
127 -    E = kzalloc(size, flags);                    
128 - else                                            
129 -    E = vzalloc(size);                           
130 + E = kvzalloc(size, flags);                      
131 |                                                 
132 - if (size cmp E1)                                
133 -    E = kzalloc(size, \(GFP_KERNEL\|GFP_KERNE    
134 - else                                            
135 -    E = vzalloc(size);                           
136 + E = kvzalloc(size, GFP_KERNEL);                 
137 |                                                 
138 - E = kzalloc(size, flags | __GFP_NOWARN);        
139 - if (E == NULL)                                  
140 -   E = vzalloc(size);                            
141 + E = kvzalloc(size, flags);                      
142 |                                                 
143 - E = kzalloc(size, \(GFP_KERNEL\|GFP_KERNEL|_    
144 - if (E == NULL)                                  
145 -   E = vzalloc(size);                            
146 + E = kvzalloc(size, GFP_KERNEL);                 
147 |                                                 
148 - T x = kzalloc(size, flags | __GFP_NOWARN);      
149 - if (x == NULL)                                  
150 -   x = vzalloc(size);                            
151 + T x = kvzalloc(size, flags);                    
152 |                                                 
153 - T x = kzalloc(size, \(GFP_KERNEL\|GFP_KERNEL    
154 - if (x == NULL)                                  
155 -   x = vzalloc(size);                            
156 + T x = kvzalloc(size, GFP_KERNEL);               
157 |                                                 
158 - if (size cmp E1)                                
159 -    E = kmalloc_node(size, flags, node);         
160 - else                                            
161 -    E = vmalloc_node(size, node);                
162 + E = kvmalloc_node(size, flags, node);           
163 |                                                 
164 - if (size cmp E1)                                
165 -    E = kmalloc_node(size, \(GFP_KERNEL\|GFP_    
166 - else                                            
167 -    E = vmalloc_node(size, node);                
168 + E = kvmalloc_node(size, GFP_KERNEL, node);      
169 |                                                 
170 - E = kmalloc_node(size, flags | __GFP_NOWARN,    
171 - if (E == NULL)                                  
172 -   E = vmalloc_node(size, node);                 
173 + E = kvmalloc_node(size, flags, node);           
174 |                                                 
175 - E = kmalloc_node(size, \(GFP_KERNEL\|GFP_KER    
176 - if (E == NULL)                                  
177 -   E = vmalloc_node(size, node);                 
178 + E = kvmalloc_node(size, GFP_KERNEL, node);      
179 |                                                 
180 - T x = kmalloc_node(size, flags | __GFP_NOWAR    
181 - if (x == NULL)                                  
182 -   x = vmalloc_node(size, node);                 
183 + T x = kvmalloc_node(size, flags, node);         
184 |                                                 
185 - T x = kmalloc_node(size, \(GFP_KERNEL\|GFP_K    
186 - if (x == NULL)                                  
187 -   x = vmalloc_node(size, node);                 
188 + T x = kvmalloc_node(size, GFP_KERNEL, node);    
189 |                                                 
190 - if (size cmp E1)                                
191 -    E = kvzalloc_node(size, flags, node);        
192 - else                                            
193 -    E = vzalloc_node(size, node);                
194 + E = kvzalloc_node(size, flags, node);           
195 |                                                 
196 - if (size cmp E1)                                
197 -    E = kvzalloc_node(size, \(GFP_KERNEL\|GFP    
198 - else                                            
199 -    E = vzalloc_node(size, node);                
200 + E = kvzalloc_node(size, GFP_KERNEL, node);      
201 |                                                 
202 - E = kvzalloc_node(size, flags | __GFP_NOWARN    
203 - if (E == NULL)                                  
204 -   E = vzalloc_node(size, node);                 
205 + E = kvzalloc_node(size, flags, node);           
206 |                                                 
207 - E = kvzalloc_node(size, \(GFP_KERNEL\|GFP_KE    
208 - if (E == NULL)                                  
209 -   E = vzalloc_node(size, node);                 
210 + E = kvzalloc_node(size, GFP_KERNEL, node);      
211 |                                                 
212 - T x = kvzalloc_node(size, flags | __GFP_NOWA    
213 - if (x == NULL)                                  
214 -   x = vzalloc_node(size, node);                 
215 + T x = kvzalloc_node(size, flags, node);         
216 |                                                 
217 - T x = kvzalloc_node(size, \(GFP_KERNEL\|GFP_    
218 - if (x == NULL)                                  
219 -   x = vzalloc_node(size, node);                 
220 + T x = kvzalloc_node(size, GFP_KERNEL, node);    
221 )                                                 
222                                                   
223 @depends on patch@                                
224 expression E;                                     
225 position p : script:python() { relevant(p) };     
226 @@                                                
227                                                   
228 - if (is_vmalloc_addr(E))@p                       
229 -   vfree(E);                                     
230 - else                                            
231 -   kfree(E);                                     
232 + kvfree(E);                                      
233                                                   
234 @script: python depends on report@                
235 p << kvmalloc.p;                                  
236 @@                                                
237                                                   
238 coccilib.report.print_report(p[0], "WARNING op    
239                                                   
240 @script: python depends on org@                   
241 p << kvmalloc.p;                                  
242 @@                                                
243                                                   
244 coccilib.org.print_todo(p[0], "WARNING opportu    
245                                                   
246 @script: python depends on report@                
247 p << kvfree.p;                                    
248 @@                                                
249                                                   
250 coccilib.report.print_report(p[0], "WARNING op    
251                                                   
252 @script: python depends on org@                   
253 p << kvfree.p;                                    
254 @@                                                
255                                                   
256 coccilib.org.print_todo(p[0], "WARNING opportu    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php