From 787f9472f9b15870ece5bb1370ddcf489b353c07 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 4 Sep 2008 07:00:29 +0000 Subject: [PATCH] =?UTF-8?q?NTR=E3=82=AB=E3=83=BC=E3=83=89=E8=B5=B7?= =?UTF-8?q?=E5=8B=95=E6=99=82=E3=80=81=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=91=E3=83=86=E3=82=A3=E3=81=AE=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=88=E3=83=ABID=E3=81=A8=E3=80=81=E3=82=AB?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8B=E3=82=89=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=82=93=E3=81=A0=E3=83=98=E3=83=83=E3=83=80=E3=81=AE=E3=82=B2?= =?UTF-8?q?=E3=83=BC=E3=83=A0=E3=82=B3=E3=83=BC=E3=83=89=E3=81=8B=E3=82=89?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=81=A7=E3=81=8D=E3=82=8B=E6=93=AC=E4=BC=BC?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=88=E3=83=ABID=E3=81=8C=E9=A3=9F?= =?UTF-8?q?=E3=81=84=E9=81=95=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=82=89?= =?UTF-8?q?FATAL=E7=99=BA=E7=94=9F=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20=E3=82=AB=E3=83=BC=E3=83=89=E8=B5=B7?= =?UTF-8?q?=E5=8B=95=E6=99=82=E3=80=81=E6=9C=80=E5=BE=8C=E3=81=ABstate?= =?UTF-8?q?=E3=81=AEchange=E3=82=92=E6=A4=9C=E5=87=BA=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=80=81=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E9=96=8B=E5=A7=8B=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E3=81=AE=E4=B8=80=E7=9E=AC=E3=81=AE=E9=96=93=E3=81=AB=E3=82=AB?= =?UTF-8?q?=E3=83=BC=E3=83=89=E6=8A=9C=E3=81=8D=E5=B7=AE=E3=81=97=E3=81=8C?= =?UTF-8?q?=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E3=80=81?= =?UTF-8?q?FATAL=E7=99=BA=E7=94=9F=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2406 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../errorLog/ARM9/src/errorLog.c | 2 ++ .../sysmenu/ARM9/src/title.c | 27 +++++++++++++++++++ build/systemMenu_RED/Launcher/ARM9/src/main.c | 4 ++- build/tests/FatalErrorChecker/ARM9/src/main.c | 6 +++-- include/sysmenu/util.h | 4 ++- 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/build/libraries_sysmenu/errorLog/ARM9/src/errorLog.c b/build/libraries_sysmenu/errorLog/ARM9/src/errorLog.c index 094ea5f0..c096bf5e 100644 --- a/build/libraries_sysmenu/errorLog/ARM9/src/errorLog.c +++ b/build/libraries_sysmenu/errorLog/ARM9/src/errorLog.c @@ -857,4 +857,6 @@ static char *s_strError[ FATAL_ERROR_MAX ] = { "FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE", "FATAL_ERROR_LOAD_AUTH_HEADER_FAILED", "FATAL_ERROR_LOAD_NEVER_STARTED", + "FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START", + "FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR", }; \ No newline at end of file diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 807d9815..7ec58833 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -984,6 +984,14 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) OS_TPrintf("SYSM_StartLoadTitle failed: This App has Data_Only flag.\n"); return; } + + // 最後、カード抜き挿しが発生してからSYSM_GetCardTitleListが呼ばれていない状態 + // (画面表示やリストに変更が通知されていない)だったらFATAL + // ただし、カード起動のときのみ + if( SYSMi_GetWork()->flags.hotsw.isCardStateChanged && pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) + { + UTL_SetFatalError(FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START); + } s_loadstart = TRUE; s_loadTimes++; // ロード回数のチェック用、二回目以降は非対応の実装なので @@ -1382,6 +1390,7 @@ void SYSM_ResumeLoadingThread( BOOL force ) static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_Header *head ) { BOOL ret = TRUE; + OSTitleId ntr_fake_titleID; #ifdef DEV_WHITELIST_CHECK_SKIP // 開発版ではハッシュチェックスルーフラグを立てる @@ -1390,6 +1399,24 @@ static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_H s_b_dev = TRUE; } #endif + + // pBootTitle->titleIDとROMヘッダのゲームコードの一致確認をする。 + ntr_fake_titleID = (u64)( ( head->s.game_code[ 3 ] << 0 ) | + ( head->s.game_code[ 2 ] << 8 ) | + ( head->s.game_code[ 1 ] << 16 ) | + ( head->s.game_code[ 0 ] << 24 ) ); + if( pBootTitle->titleID != ntr_fake_titleID ) + { + // ヘッダから作成した擬似titleIDが起動指定されたタイトルに格納されている擬似IDと違う + OS_TPrintf( "SYSMi_AuthenticateNTRCardAppHeader failed: header TitleID error\n" ); + OS_TPrintf( "SYSMi_AuthenticateNTRCardAppHeader failed: selectedTitleID=%.16llx\n", pBootTitle->titleID ); + OS_TPrintf( "SYSMi_AuthenticateNTRCardAppHeader failed: headerTitleID=%.16llx\n", ntr_fake_titleID ); + UTL_SetFatalError(FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR); + return FALSE; + }else + { + OS_TPrintf( "Authenticate_Header : header TitleID check succeed.\n" ); + } if( head->s.exFlags.enable_nitro_whitelist_signature ) { diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 64020eb1..e1124701 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -121,7 +121,9 @@ static const char *fatal_error_msg[FATAL_ERROR_MAX] = "DHT_PHASE1_CALC_FAILED", "LOAD_UNKNOWN_BOOTTYPE", "LOAD_AUTH_HEADER_FAILED", - "LOAD_NEVER_STARTED" + "LOAD_NEVER_STARTED", + "EJECT_CARD_AFTER_LOAD_START", + "TITLEID_COMPARE_FAILED_NTR" }; //#define DEBUG_LAUNCHER_DUMP diff --git a/build/tests/FatalErrorChecker/ARM9/src/main.c b/build/tests/FatalErrorChecker/ARM9/src/main.c index ce98efe0..4bbb0665 100644 --- a/build/tests/FatalErrorChecker/ARM9/src/main.c +++ b/build/tests/FatalErrorChecker/ARM9/src/main.c @@ -23,7 +23,7 @@ #define BUFSIZE 256 -#define FATAL_ERROR_MAX 49 +#define FATAL_ERROR_MAX 51 #define NUM_ENTRY_PER_PAGE 5 #define NUM_LINE_PER_ENTRY 4 #define SKIP_SPAN 5 @@ -637,5 +637,7 @@ static char *s_strError[ FATAL_ERROR_MAX ] = { "DHT_PHASE1_CALC_FAILED", "LOAD_UNKNOWN_BOOTTYPE", "LOAD_AUTH_HEADER_FAILED", - "LOAD_NEVER_STARTED" + "LOAD_NEVER_STARTED", + "EJECT_CARD_AFTER_LOAD_START", + "TITLEID_COMPARE_FAILED_NTR" }; diff --git a/include/sysmenu/util.h b/include/sysmenu/util.h index 8025480c..34df2d31 100644 --- a/include/sysmenu/util.h +++ b/include/sysmenu/util.h @@ -78,8 +78,10 @@ typedef enum FatalErrorCode { FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE = 46, FATAL_ERROR_LOAD_AUTH_HEADER_FAILED = 47, FATAL_ERROR_LOAD_NEVER_STARTED = 48, + FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START = 49, + FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR = 50, - FATAL_ERROR_MAX = 49 + FATAL_ERROR_MAX = 51 }FatalErrorCode;