Skip to content

Commit

Permalink
Blackfin arch: ensure that speculative loads of bad pointers don't ca…
Browse files Browse the repository at this point in the history
…use us to do bad things.

Fix/change formatting of a few more things.

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
  • Loading branch information
Robin Getz authored and Bryan Wu committed Oct 29, 2007
1 parent 15b3ad6 commit 9f336a5
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 2 deletions.
14 changes: 14 additions & 0 deletions arch/blackfin/kernel/fixed_code.S
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 2 additions & 0 deletions arch/blackfin/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion arch/blackfin/mach-common/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
1 change: 1 addition & 0 deletions include/asm-blackfin/bfin-global.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 3 additions & 1 deletion include/asm-blackfin/fixed_code.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@

#define ATOMIC_SEQS_END 0x480

#define FIXED_CODE_END 0x480
#define SAFE_USER_INSTRUCTION 0x480

#define FIXED_CODE_END 0x490

0 comments on commit 9f336a5

Please sign in to comment.