NTRカード起動時、タイトルプロパティのタイトルIDと、カードから読み込んだヘッダのゲームコードから作成できる擬似タイトルIDが食い違っていたらFATAL発生するよう変更

カード起動時、最後にstateのchangeを検出してから、タイトルロード開始までの一瞬の間にカード抜き差しが発生した場合、FATAL発生するよう変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2406 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-09-04 07:00:29 +00:00
parent b60f59a9f7
commit 787f9472f9
5 changed files with 39 additions and 4 deletions

View File

@ -857,4 +857,6 @@ static char *s_strError[ FATAL_ERROR_MAX ] = {
"FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE", "FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE",
"FATAL_ERROR_LOAD_AUTH_HEADER_FAILED", "FATAL_ERROR_LOAD_AUTH_HEADER_FAILED",
"FATAL_ERROR_LOAD_NEVER_STARTED", "FATAL_ERROR_LOAD_NEVER_STARTED",
"FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START",
"FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR",
}; };

View File

@ -984,6 +984,14 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
OS_TPrintf("SYSM_StartLoadTitle failed: This App has Data_Only flag.\n"); OS_TPrintf("SYSM_StartLoadTitle failed: This App has Data_Only flag.\n");
return; 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_loadstart = TRUE;
s_loadTimes++; // ロード回数のチェック用、二回目以降は非対応の実装なので s_loadTimes++; // ロード回数のチェック用、二回目以降は非対応の実装なので
@ -1382,6 +1390,7 @@ void SYSM_ResumeLoadingThread( BOOL force )
static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_Header *head ) static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_Header *head )
{ {
BOOL ret = TRUE; BOOL ret = TRUE;
OSTitleId ntr_fake_titleID;
#ifdef DEV_WHITELIST_CHECK_SKIP #ifdef DEV_WHITELIST_CHECK_SKIP
// 開発版ではハッシュチェックスルーフラグを立てる // 開発版ではハッシュチェックスルーフラグを立てる
@ -1390,6 +1399,24 @@ static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_H
s_b_dev = TRUE; s_b_dev = TRUE;
} }
#endif #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 ) if( head->s.exFlags.enable_nitro_whitelist_signature )
{ {

View File

@ -121,7 +121,9 @@ static const char *fatal_error_msg[FATAL_ERROR_MAX] =
"DHT_PHASE1_CALC_FAILED", "DHT_PHASE1_CALC_FAILED",
"LOAD_UNKNOWN_BOOTTYPE", "LOAD_UNKNOWN_BOOTTYPE",
"LOAD_AUTH_HEADER_FAILED", "LOAD_AUTH_HEADER_FAILED",
"LOAD_NEVER_STARTED" "LOAD_NEVER_STARTED",
"EJECT_CARD_AFTER_LOAD_START",
"TITLEID_COMPARE_FAILED_NTR"
}; };
//#define DEBUG_LAUNCHER_DUMP //#define DEBUG_LAUNCHER_DUMP

View File

@ -23,7 +23,7 @@
#define BUFSIZE 256 #define BUFSIZE 256
#define FATAL_ERROR_MAX 49 #define FATAL_ERROR_MAX 51
#define NUM_ENTRY_PER_PAGE 5 #define NUM_ENTRY_PER_PAGE 5
#define NUM_LINE_PER_ENTRY 4 #define NUM_LINE_PER_ENTRY 4
#define SKIP_SPAN 5 #define SKIP_SPAN 5
@ -637,5 +637,7 @@ static char *s_strError[ FATAL_ERROR_MAX ] = {
"DHT_PHASE1_CALC_FAILED", "DHT_PHASE1_CALC_FAILED",
"LOAD_UNKNOWN_BOOTTYPE", "LOAD_UNKNOWN_BOOTTYPE",
"LOAD_AUTH_HEADER_FAILED", "LOAD_AUTH_HEADER_FAILED",
"LOAD_NEVER_STARTED" "LOAD_NEVER_STARTED",
"EJECT_CARD_AFTER_LOAD_START",
"TITLEID_COMPARE_FAILED_NTR"
}; };

View File

@ -78,8 +78,10 @@ typedef enum FatalErrorCode {
FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE = 46, FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE = 46,
FATAL_ERROR_LOAD_AUTH_HEADER_FAILED = 47, FATAL_ERROR_LOAD_AUTH_HEADER_FAILED = 47,
FATAL_ERROR_LOAD_NEVER_STARTED = 48, 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; }FatalErrorCode;