Backport FIRM whitelist from b9s
This commit is contained in:
parent
692a94fe5e
commit
8e22080e05
@ -409,9 +409,16 @@ u32 patch1x2xNativeAndSafeFirm(bool enableExceptionHandlers)
|
|||||||
|
|
||||||
static __attribute__((noinline)) bool overlaps(u32 as, u32 ae, u32 bs, u32 be)
|
static __attribute__((noinline)) bool overlaps(u32 as, u32 ae, u32 bs, u32 be)
|
||||||
{
|
{
|
||||||
if (as <= bs && bs <= ae)
|
if(as <= bs && bs <= ae)
|
||||||
return true;
|
return true;
|
||||||
else if (bs <= as && as <= be)
|
if(bs <= as && as <= be)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __attribute__((noinline)) bool inRange(u32 as, u32 ae, u32 bs, u32 be)
|
||||||
|
{
|
||||||
|
if(as >= bs && ae <= be)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -441,9 +448,11 @@ bool checkFirmPayload(void)
|
|||||||
if((section->offset < 0x200) ||
|
if((section->offset < 0x200) ||
|
||||||
(section->address + section->size < section->address) || //Overflow check
|
(section->address + section->size < section->address) || //Overflow check
|
||||||
((u32)section->address & 3) || (section->offset & 0x1FF) || (section->size & 0x1FF) || //Alignment check
|
((u32)section->address & 3) || (section->offset & 0x1FF) || (section->size & 0x1FF) || //Alignment check
|
||||||
(overlaps((u32)section->address, (u32)section->address + section->size, 0x01FF8000, 0x01FF8000 + 0x8000)) ||
|
(overlaps((u32)section->address, (u32)section->address + section->size, (u32)firm + section->offset, (u32)firm + size)) ||
|
||||||
(overlaps((u32)section->address, (u32)section->address + section->size, 0x1FFFFC00, 0x20000000)) ||
|
((!inRange((u32)section->address, (u32)section->address + section->size, 0x08000000, 0x08000000 + 0x00100000)) &&
|
||||||
(overlaps((u32)section->address, (u32)section->address + section->size, (u32)firm + section->offset, (u32)firm + size)))
|
(!inRange((u32)section->address, (u32)section->address + section->size, 0x18000000, 0x18000000 + 0x00600000)) &&
|
||||||
|
(!inRange((u32)section->address, (u32)section->address + section->size, 0x1FF00000, 0x1FFFFC00)) &&
|
||||||
|
(!inRange((u32)section->address, (u32)section->address + section->size, 0x20000000, 0x20000000 + 0x8000000))))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
sha(hash, (u8 *)firm + section->offset, section->size, SHA_256_MODE);
|
sha(hash, (u8 *)firm + section->offset, section->size, SHA_256_MODE);
|
||||||
|
@ -58,11 +58,11 @@ _start:
|
|||||||
|
|
||||||
@ Set MPU permissions and cache settings
|
@ Set MPU permissions and cache settings
|
||||||
ldr r0, =0xFFFF001D @ ffff0000 32k | bootrom (unprotected part)
|
ldr r0, =0xFFFF001D @ ffff0000 32k | bootrom (unprotected part)
|
||||||
ldr r1, =0xFFF0001B @ fff00000 16k | dtcm
|
ldr r1, =0xFFF0801B @ fff00000 16k | dtcm
|
||||||
ldr r2, =0x01FF801D @ 01ff8000 32k | itcm
|
ldr r2, =0x01FF801D @ 01ff8000 32k | itcm
|
||||||
ldr r3, =0x08000029 @ 08000000 2M | arm9 mem (O3DS / N3DS)
|
ldr r3, =0x08000027 @ 08000000 1M | arm9 mem
|
||||||
ldr r4, =0x10000029 @ 10000000 2M | io mem (ARM9 / first 2MB)
|
ldr r4, =0x10000029 @ 10000000 2M | io mem (ARM9 / first 2MB)
|
||||||
ldr r5, =0x20000037 @ 20000000 256M | fcram (O3DS / N3DS)
|
ldr r5, =0x20000035 @ 20000000 128M | fcram
|
||||||
ldr r6, =0x1FF00027 @ 1FF00000 1M | dsp / axi wram
|
ldr r6, =0x1FF00027 @ 1FF00000 1M | dsp / axi wram
|
||||||
ldr r7, =0x1800002D @ 18000000 8M | vram (+ 2MB)
|
ldr r7, =0x1800002D @ 18000000 8M | vram (+ 2MB)
|
||||||
mov r8, #0x29
|
mov r8, #0x29
|
||||||
|
Reference in New Issue
Block a user