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_AUTH_HEADER_FAILED",
"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");
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 )
{

View File

@ -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

View File

@ -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"
};

View File

@ -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;