mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
再配置情報生成時に、ロード先が
・エントリポイント不可領域に被っていないか ・最終ブートコード領域に被っていないか をチェックするように変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2198 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
5d97232c2f
commit
6d2e048057
@ -35,6 +35,7 @@ TARGET_LIB = libreloc_info_sp$(TWL_LIBSUFFIX).a
|
||||
|
||||
|
||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||
|
||||
@ -34,6 +34,7 @@ TARGET_LIB = libreloc_info$(TWL_LIBSUFFIX).a
|
||||
|
||||
|
||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <sysmenu/sysmenu_lib.h>
|
||||
#include "reboot.h"
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
@ -72,7 +73,10 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
|
||||
( u32 *dest, u32 length, RomSegmentRange default_region, u32 *check_dest, Relocate_Info *info )
|
||||
{
|
||||
u32 ori_len = length;
|
||||
length = MATH_ROUNDUP( length, SYSM_ALIGNMENT_LOAD_MODULE );// AES暗号化領域の関係で、再配置必要性のチェックに使うlengthは32バイトアライメントに補正
|
||||
|
||||
// AES暗号化領域の関係で、再配置必要性およびサイズオーバーのチェックに使うlengthは32バイトアライメントに補正
|
||||
// (そうでないと、デフォルトロード領域の後ろ数バイトまでAES暗号解除処理されてしまう可能性があるため)
|
||||
length = MATH_ROUNDUP( length, SYSM_ALIGNMENT_LOAD_MODULE );
|
||||
MI_CpuClearFast( info, sizeof(Relocate_Info) );
|
||||
if( default_region.end - default_region.start < length ) return FALSE;// ƒTƒCƒYƒI<C692>[ƒo<C692>[
|
||||
if( !( default_region.start <= *dest && *dest + length <= default_region.end ) )
|
||||
@ -138,5 +142,24 @@ BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32
|
||||
//NTR<54>ê—p
|
||||
rsr = romSegmentRangeNitro;
|
||||
}
|
||||
|
||||
// *dest から *dest+length がアプリロード禁止領域(Launcher最終ブートコード及びエントリポイント不可領域)に被っていないかどうか判定
|
||||
if( (
|
||||
( seg == ARM9_STATIC || seg == ARM9_LTD_STATIC ) &&
|
||||
!( ( *dest >= HW_MAIN_MEM ) && ( *dest + length < HW_TWL_MAIN_MEM_SHARED ) )
|
||||
) ||
|
||||
( ( seg == ARM7_STATIC || seg == ARM7_LTD_STATIC ) &&
|
||||
!( ( ( *dest >= HW_MAIN_MEM ) &&
|
||||
( *dest + length < HW_TWL_MAIN_MEM_SHARED ) ) ||
|
||||
( ( *dest >= HW_WRAM_BASE ) &&
|
||||
( *dest + length < SYSM_NTR_ARM7_LOAD_WRAM_END ) ) )
|
||||
) ||
|
||||
!( ( *dest + length < OS_BOOT_A9CODE_BUF ) || ( *dest >= OS_BOOT_A9CODE_BUF + OS_BOOT_CODE_SIZE ) ) ||
|
||||
!( ( *dest + length < OS_BOOT_A7CODE_BUF ) || ( *dest >= OS_BOOT_A7CODE_BUF + OS_BOOT_CODE_SIZE ) )
|
||||
) {
|
||||
OS_TPrintf("load address invalid.\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return SYSMi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, rsr[seg], load_region_check_list[seg], info);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user