coccinelle: Check for missing NULL terminators in of_device_id tables
Failure to terminate an of_device_id table can lead to confusing failures depending on where the compiler places the array. Add a check to make sure these tables are terminated. Thanks to Mitchel Humpherys for coming up with the pattern initially. Cc: Mitchel Humpherys <mitchelh@codeaurora.org> Cc: Gilles Muller <Gilles.Muller@lip6.fr> Cc: Nicolas Palix <nicolas.palix@imag.fr> Cc: Rob Herring <robh+dt@kernel.org> Cc: devicetree@vger.kernel.org Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Acked-by: Grant Likely <grant.likely@linaro.org> Signed-off-by: Julia Lawall <julia.lawall@lip6.fr> Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
		
							parent
							
								
									9b24a15d81
								
							
						
					
					
						commit
						2d5c5dbb48
					
				
							
								
								
									
										62
									
								
								scripts/coccinelle/misc/of_table.cocci
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								scripts/coccinelle/misc/of_table.cocci
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| /// Make sure of_device_id tables are NULL terminated | ||||
| // | ||||
| // Keywords: of_table | ||||
| // Confidence: Medium | ||||
| // Options: --include-headers | ||||
| 
 | ||||
| virtual patch | ||||
| virtual context | ||||
| virtual org | ||||
| virtual report | ||||
| 
 | ||||
| @depends on context@ | ||||
| identifier var, arr; | ||||
| expression E; | ||||
| @@ | ||||
| struct of_device_id arr[] = { | ||||
| 	..., | ||||
| 	{ | ||||
| 	.var = E, | ||||
| *	} | ||||
| }; | ||||
| 
 | ||||
| @depends on patch@ | ||||
| identifier var, arr; | ||||
| expression E; | ||||
| @@ | ||||
| struct of_device_id arr[] = { | ||||
| 	..., | ||||
| 	{ | ||||
| 	.var = E, | ||||
| -	} | ||||
| +	}, | ||||
| +	{ } | ||||
| }; | ||||
| 
 | ||||
| @r depends on org || report@ | ||||
| position p1; | ||||
| identifier var, arr; | ||||
| expression E; | ||||
| @@ | ||||
| struct of_device_id arr[] = { | ||||
| 	..., | ||||
| 	{ | ||||
| 	.var = E, | ||||
| 	} | ||||
| 	@p1 | ||||
| }; | ||||
| 
 | ||||
| @script:python depends on org@ | ||||
| p1 << r.p1; | ||||
| arr << r.arr; | ||||
| @@ | ||||
| 
 | ||||
| cocci.print_main(arr,p1) | ||||
| 
 | ||||
| @script:python depends on report@ | ||||
| p1 << r.p1; | ||||
| arr << r.arr; | ||||
| @@ | ||||
| 
 | ||||
| msg = "%s is not NULL terminated at line %s" % (arr, p1[0].line) | ||||
| coccilib.report.print_report(p1[0],msg) | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user