ARM: poison the vectors page
Fill the empty regions of the vectors page with an exception generating instruction. This ensures that any inappropriate branch to the vector page is appropriately trapped, rather than just encountering some code to execute. (The vectors page was filled with zero before, which corresponds with the "andeq r0, r0, r0" instruction - a no-op.) Cc: <stable@vger.kernel.org> Acked-by Nicolas Pitre <nico@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
		
					parent
					
						
							
								3b2f64d00c
							
						
					
				
			
			
				commit
				
					
						f928d4f2a8
					
				
			
		
					 1 changed files with 10 additions and 0 deletions
				
			
		|  | @ -818,9 +818,19 @@ void __init early_trap_init(void *vectors_base) | |||
| 	extern char __vectors_start[], __vectors_end[]; | ||||
| 	extern char __kuser_helper_start[], __kuser_helper_end[]; | ||||
| 	int kuser_sz = __kuser_helper_end - __kuser_helper_start; | ||||
| 	unsigned i; | ||||
| 
 | ||||
| 	vectors_page = vectors_base; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Poison the vectors page with an undefined instruction.  This | ||||
| 	 * instruction is chosen to be undefined for both ARM and Thumb | ||||
| 	 * ISAs.  The Thumb version is an undefined instruction with a | ||||
| 	 * branch back to the undefined instruction. | ||||
| 	 */ | ||||
| 	for (i = 0; i < PAGE_SIZE / sizeof(u32); i++) | ||||
| 		((u32 *)vectors_base)[i] = 0xe7fddef1; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Copy the vectors, stubs and kuser helpers (in entry-armv.S) | ||||
| 	 * into the vector page, mapped at 0xffff0000, and ensure these | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Russell King
				Russell King