Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f336a53 authored by Robin Getz's avatar Robin Getz Committed by Bryan Wu
Browse files

Blackfin arch: ensure that speculative loads of bad pointers don't cause us to do bad things.



Fix/change formatting of a few more things.

Signed-off-by: default avatarRobin Getz <robin.getz@analog.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
parent 15b3ad6a
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -129,4 +129,18 @@ ENTRY(_atomic_xor32)
	rts;
ENDPROC (_atomic_ior32)

.align 16
	/*
	 * safe_user_instruction
	 * Four NOPS are enough to allow the pipeline to speculativily load
	 * execute anything it wants. After that, things have gone bad, and
	 * we are stuck - so panic. Since we might be in user space, we can't
	 * call panic, so just cause a unhandled exception, this should cause
	 * a dump of the trace buffer so we can tell were we are, and a reboot
	 */
ENTRY(_safe_user_instruction)
	NOP; NOP; NOP; NOP;
	EXCPT 0x4;
ENDPROC(_safe_user_instruction)

ENTRY(_fixed_code_end)
+2 −0
Original line number Diff line number Diff line
@@ -431,6 +431,8 @@ void __init setup_arch(char **cmdline_p)
	       != ATOMIC_AND32 - FIXED_CODE_START);
	BUG_ON((char *)&atomic_xor32 - (char *)&fixed_code_start
	       != ATOMIC_XOR32 - FIXED_CODE_START);
	BUG_ON((char *)&safe_user_instruction - (char *)&fixed_code_start
		!= SAFE_USER_INSTRUCTION - FIXED_CODE_START);

	init_exception_vectors();
	bf53x_cache_init();
+1 −1
Original line number Diff line number Diff line
@@ -917,7 +917,7 @@ ENTRY(_ex_table)
	.long _ex_soft_bp       /* 0x01 - User Defined - Software breakpoint */
	.long _ex_replaceable   /* 0x02 - User Defined */
	.long _ex_trap_c        /* 0x03 - User Defined - userspace stack overflow */
	.long _ex_replaceable   /* 0x04 - User Defined */
	.long _ex_trap_c        /* 0x04 - User Defined - dump trace buffer */
	.long _ex_replaceable   /* 0x05 - User Defined */
	.long _ex_replaceable   /* 0x06 - User Defined */
	.long _ex_replaceable   /* 0x07 - User Defined */
+1 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ extern int atomic_sub32(void);
extern int atomic_ior32(void);
extern int atomic_and32(void);
extern int atomic_xor32(void);
extern void safe_user_instruction(void);
extern void sigreturn_stub(void);

extern void *l1_data_A_sram_alloc(size_t);
+3 −1
Original line number Diff line number Diff line
@@ -17,4 +17,6 @@

#define ATOMIC_SEQS_END		0x480

#define FIXED_CODE_END		0x480
#define SAFE_USER_INSTRUCTION   0x480

#define FIXED_CODE_END		0x490