Skip to content

Commit f928d4f

Browse files
author
Russell King
committed
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>
1 parent 3b2f64d commit f928d4f

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

arch/arm/kernel/traps.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,9 +818,19 @@ void __init early_trap_init(void *vectors_base)
818818
extern char __vectors_start[], __vectors_end[];
819819
extern char __kuser_helper_start[], __kuser_helper_end[];
820820
int kuser_sz = __kuser_helper_end - __kuser_helper_start;
821+
unsigned i;
821822

822823
vectors_page = vectors_base;
823824

825+
/*
826+
* Poison the vectors page with an undefined instruction. This
827+
* instruction is chosen to be undefined for both ARM and Thumb
828+
* ISAs. The Thumb version is an undefined instruction with a
829+
* branch back to the undefined instruction.
830+
*/
831+
for (i = 0; i < PAGE_SIZE / sizeof(u32); i++)
832+
((u32 *)vectors_base)[i] = 0xe7fddef1;
833+
824834
/*
825835
* Copy the vectors, stubs and kuser helpers (in entry-armv.S)
826836
* into the vector page, mapped at 0xffff0000, and ensure these

0 commit comments

Comments
 (0)