36 lines
		
	
	
	
		
			799 B
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
	
		
			799 B
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								/// Use kmemdup_user rather than duplicating its implementation
							 | 
						||
| 
								 | 
							
								/// This is a little bit restricted to reduce false positives
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								// Confidence: High
							 | 
						||
| 
								 | 
							
								// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
							 | 
						||
| 
								 | 
							
								// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
							 | 
						||
| 
								 | 
							
								// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
							 | 
						||
| 
								 | 
							
								// URL: http://coccinelle.lip6.fr/
							 | 
						||
| 
								 | 
							
								// Comments:
							 | 
						||
| 
								 | 
							
								// Options: -no_includes -include_headers
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								virtual patch
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@@
							 | 
						||
| 
								 | 
							
								expression from,to,size,flag;
							 | 
						||
| 
								 | 
							
								position p;
							 | 
						||
| 
								 | 
							
								identifier l1,l2;
							 | 
						||
| 
								 | 
							
								@@
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								-  to = \(kmalloc@p\|kzalloc@p\)(size,flag);
							 | 
						||
| 
								 | 
							
								+  to = memdup_user(from,size);
							 | 
						||
| 
								 | 
							
								   if (
							 | 
						||
| 
								 | 
							
								-      to==NULL
							 | 
						||
| 
								 | 
							
								+      IS_ERR(to)
							 | 
						||
| 
								 | 
							
								                 || ...) {
							 | 
						||
| 
								 | 
							
								   <+... when != goto l1;
							 | 
						||
| 
								 | 
							
								-  -ENOMEM
							 | 
						||
| 
								 | 
							
								+  PTR_ERR(to)
							 | 
						||
| 
								 | 
							
								   ...+>
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								-  if (copy_from_user(to, from, size) != 0) {
							 | 
						||
| 
								 | 
							
								-    <+... when != goto l2;
							 | 
						||
| 
								 | 
							
								-    -EFAULT
							 | 
						||
| 
								 | 
							
								-    ...+>
							 | 
						||
| 
								 | 
							
								-  }
							 |