From 6d2e048057f3c64a18608579b2cb5fce61ad0f40 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Wed, 20 Aug 2008 05:52:09 +0000 Subject: [PATCH] =?UTF-8?q?=E5=86=8D=E9=85=8D=E7=BD=AE=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=99=82=E3=81=AB=E3=80=81=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E5=85=88=E3=81=8C=20=E3=80=80=E3=83=BB=E3=82=A8?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=83=AA=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E9=A0=98=E5=9F=9F=E3=81=AB=E8=A2=AB=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=81=8B=20=E3=80=80?= =?UTF-8?q?=E3=83=BB=E6=9C=80=E7=B5=82=E3=83=96=E3=83=BC=E3=83=88=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E9=A0=98=E5=9F=9F=E3=81=AB=E8=A2=AB=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=81=8B=20=E3=82=92?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=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@2198 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../reloc_info/ARM7/Makefile | 1 + .../reloc_info/ARM9/Makefile | 1 + .../reloc_info/common/src/reloc_info.c | 25 ++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/build/libraries_sysmenu/reloc_info/ARM7/Makefile b/build/libraries_sysmenu/reloc_info/ARM7/Makefile index ff3935aa..79600e55 100644 --- a/build/libraries_sysmenu/reloc_info/ARM7/Makefile +++ b/build/libraries_sysmenu/reloc_info/ARM7/Makefile @@ -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) diff --git a/build/libraries_sysmenu/reloc_info/ARM9/Makefile b/build/libraries_sysmenu/reloc_info/ARM9/Makefile index 64194b62..f674a2c6 100644 --- a/build/libraries_sysmenu/reloc_info/ARM9/Makefile +++ b/build/libraries_sysmenu/reloc_info/ARM9/Makefile @@ -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) diff --git a/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c b/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c index 1a04acbe..8ad060b1 100644 --- a/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c +++ b/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c @@ -16,6 +16,7 @@ *---------------------------------------------------------------------------*/ #include +#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;// サイズオーバー if( !( default_region.start <= *dest && *dest + length <= default_region.end ) ) @@ -138,5 +142,24 @@ BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 //NTR専用 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); }