別スレッドのスタック書き換えによるシステムモードのハッキングに対応。

但し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:
nakasima 2009-02-03 06:26:44 +00:00
parent a458e5996d
commit 23acec2819

View File

@ -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
// 呼び出し元のモード