diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 183ab079..b3086c78 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -34,7 +34,7 @@ #define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) ) #define PRE_CLEAR_NUM_MAX (6*2) -#define COPY_NUM_MAX (5*3) +#define COPY_NUM_MAX (6*3) #define POST_CLEAR_NUM_MAX (12 + 6*2) #define CLRLIST_REBOOT_STACK_PAD_SIZE_IDX (2*3+1) @@ -181,9 +181,27 @@ BOOL BOOT_WaitStart( void ) }; // copy forwardリスト設定 - mem_list[list_count++] = SYSM_TWL_MOUNT_INFO_TMP_BUFFER; - mem_list[list_count++] = (u32)th->s.sub_mount_info_ram_address; - mem_list[list_count++] = SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN; + // カードアプリのときはNTRセキュア領域再配置コピー + if( SYSMi_GetWork2()->bootTitleProperty.flags.bootType == LAUNCHER_BOOTTYPE_ROM) + { + u32 *dest = dh->s.main_ram_address; + // romの再配置情報を参照して、セキュア領域の再配置先を変更する必要が無いか調べる + if( SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src != NULL ) + { + dest = (u32 *)SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src; + } + mem_list[list_count++] = SYSM_CARD_NTR_SECURE_BUF; + mem_list[list_count++] = (u32)dest; + mem_list[list_count++] = ( dh->s.main_size < SECURE_AREA_SIZE ) ? dh->s.main_size : SECURE_AREA_SIZE; + } + // マウント情報 + if( !isNtrMode ) + { + mem_list[list_count++] = SYSM_TWL_MOUNT_INFO_TMP_BUFFER; + mem_list[list_count++] = (u32)th->s.sub_mount_info_ram_address; + mem_list[list_count++] = SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN; + } + // モジュール再配置コピーforward for( l=0; lromRelocateInfo[l].src != NULL && !SYSMi_GetWork()->romRelocateInfo[l].rev ) @@ -196,6 +214,7 @@ BOOL BOOT_WaitStart( void ) mem_list[list_count++] = NULL; // copy backwardリスト設定 + // モジュール再配置コピーbackward for( l=0; lromRelocateInfo[l].src != NULL && SYSMi_GetWork()->romRelocateInfo[l].rev ) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index e314089b..f6c6f7ff 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -672,18 +672,8 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) static void SYSMi_Relocate( void ) { u32 size; - u32 *dest = SYSM_GetCardRomHeader()->main_ram_address; - // NTRセキュア領域の再配置 - DC_InvalidateRange( (void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE ); // キャッシュケア - size = ( SYSM_GetCardRomHeader()->main_size < SECURE_AREA_SIZE ) ? - SYSM_GetCardRomHeader()->main_size : SECURE_AREA_SIZE; - // romの再配置情報を参照して、セキュア領域の再配置先を変更する必要が無いか調べる - if( SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src != NULL ) - { - dest = (u32 *)SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src; - } - MI_CpuCopyFast( (void *)SYSM_CARD_NTR_SECURE_BUF, dest, size ); - + u32 *dest ; + // NTRセキュア領域の再配置は後でbootAPIおよびrebootライブラリにて行う if( SYSM_GetCardRomHeader()->platform_code & PLATFORM_CODE_FLAG_TWL ) { // TWLモード // TWLセキュア領域の再配置 @@ -924,9 +914,15 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle ) OS_ReleaseLockID( id ); SVC_HMACSHA1Update( &ctx, - (const void*)((u32)module_addr[l] + ARM9_ENCRYPT_DEF_SIZE), - (module_size[l] - ARM9_ENCRYPT_DEF_SIZE) ); - SVC_HMACSHA1GetHash( &ctx, calculated_hash ); + (const void*)(SYSM_CARD_NTR_SECURE_BUF + ARM9_ENCRYPT_DEF_SIZE), + (SECURE_AREA_SIZE - ARM9_ENCRYPT_DEF_SIZE) ); + if( module_size[l] > SECURE_AREA_SIZE ) + { + SVC_HMACSHA1Update( &ctx, + (const void*)((u32)module_addr[l] + SECURE_AREA_SIZE), + (module_size[l] - SECURE_AREA_SIZE) ); + SVC_HMACSHA1GetHash( &ctx, calculated_hash ); + } }else { SVC_CalcHMACSHA1( calculated_hash, (const void*)module_addr[l], module_size[l],