mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
別スレッドのスタック書き換えによるシステムモードのハッキングに対応。
但しDMAによるハッキングへ対応するにはユーザモードとSVCモードのスタックを分ける必要がある(OSのラッパーで対応予定)。 git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@247 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
a458e5996d
commit
23acec2819
@ -263,12 +263,16 @@ asm void i_stupSwiHandler( void )
|
||||
mov sp, r1 // ※SP_svc
|
||||
mov r1, lr
|
||||
mrs r0, spsr
|
||||
stmfd sp!, {r0, lr} // SPSR_svc、LR_svcを退避
|
||||
stmfd sp!, {r0, lr} // SPSR_svc、LR_svcを退避(このLR_svcは最後にPOPするので安全)
|
||||
// 割り込み状態継承
|
||||
and r0, r0, #(HW_PSR_CPU_MODE_MASK | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE)
|
||||
// ユーザモードならシステムモードへ
|
||||
tst r0, #HW_PSR_SYS_MODE ^ HW_PSR_USR_MODE
|
||||
orreq r0, r0, #HW_PSR_SYS_MODE
|
||||
// ユーザモードなら割り込み禁止でシステムモードへ
|
||||
// (割り込み禁止にするのは別スレッドからスタックへ退避したPCを
|
||||
// 書き換えて、システムモードを乗っ取られないようにするため。
|
||||
// 但し、DMAによるハッキングへ対応するにはユーザモードとSVCモードの
|
||||
// スタックを分ける必要がある(OSのラッパーで対応予定)。)
|
||||
tst r0, #(HW_PSR_SYS_MODE ^ HW_PSR_USR_MODE)
|
||||
orreq r0, r0, #(HW_PSR_SYS_MODE | HW_PSR_IRQ_DISABLE)
|
||||
msr cpsr_fsxc, r0
|
||||
|
||||
// 呼び出し元のモード
|
||||
|
||||
Loading…
Reference in New Issue
Block a user