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>
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			831 B
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			831 B
			
		
	
	
	
		
			Text
		
	
	
	
	
	
/// 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)
 |