71 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | /// This removes an open coded simple_open() function | ||
|  | /// and replaces file operations references to the function | ||
|  | /// with simple_open() instead. | ||
|  | /// | ||
|  | // Confidence: High | ||
|  | // Comments: | ||
|  | // Options: -no_includes -include_headers | ||
|  | 
 | ||
|  | virtual patch | ||
|  | virtual report | ||
|  | 
 | ||
|  | @ open depends on patch @ | ||
|  | identifier open_f != simple_open; | ||
|  | identifier i, f; | ||
|  | @@ | ||
|  | -int open_f(struct inode *i, struct file *f) | ||
|  | -{ | ||
|  | ( | ||
|  | -if (i->i_private) | ||
|  | -f->private_data = i->i_private; | ||
|  | | | ||
|  | -f->private_data = i->i_private; | ||
|  | ) | ||
|  | -return 0; | ||
|  | -} | ||
|  | 
 | ||
|  | @ has_open depends on open @ | ||
|  | identifier fops; | ||
|  | identifier open.open_f; | ||
|  | @@ | ||
|  | struct file_operations fops = { | ||
|  | ..., | ||
|  | -.open = open_f, | ||
|  | +.open = simple_open, | ||
|  | ... | ||
|  | }; | ||
|  | 
 | ||
|  | @ openr depends on report @ | ||
|  | identifier open_f != simple_open; | ||
|  | identifier i, f; | ||
|  | position p; | ||
|  | @@ | ||
|  | int open_f@p(struct inode *i, struct file *f) | ||
|  | { | ||
|  | ( | ||
|  | if (i->i_private) | ||
|  | f->private_data = i->i_private; | ||
|  | | | ||
|  | f->private_data = i->i_private; | ||
|  | ) | ||
|  | return 0; | ||
|  | } | ||
|  | 
 | ||
|  | @ has_openr depends on openr @ | ||
|  | identifier fops; | ||
|  | identifier openr.open_f; | ||
|  | position p; | ||
|  | @@ | ||
|  | struct file_operations fops = { | ||
|  | ..., | ||
|  | .open = open_f@p, | ||
|  | ... | ||
|  | }; | ||
|  | 
 | ||
|  | @script:python@ | ||
|  | pf << openr.p; | ||
|  | ps << has_openr.p; | ||
|  | @@ | ||
|  | 
 | ||
|  | coccilib.report.print_report(pf[0],"WARNING opportunity for simple_open, see also structure on line %s"%(ps[0].line)) |